Указатели на виртуальные функции-члены
От: What Беларусь  
Дата: 18.02.04 13:08
Оценка:
Не могу понять логику работы компилятора (см. комментарии).
Компилировал на VC++ 7.1
class CBase
{
public:
    virtual void f()
    {
        std::cout << "CBase::f()\n";
    }
};

class CDerived : public CBase
{
public:
    virtual void f()
    {
        std::cout << "CDerived::f()\n";
    }
};

typedef void (CBase::* TPtrBase)();
typedef void (CDerived::* TPtrDerived)();

void main()
{
    CDerived d;
    TPtrBase pBase = CBase::f;
    TPtrDerived pDerived = CDerived::f;
    // pBase = pDerived; // Не компилируется, почему?
    pDerived = pBase;    // Почему тогда это компилируется?
    d.CBase::f();        // Вызывается функция базового класса. Всё ок.
    (d.*pDerived)();     // Вызывается функция класса-наследника. Всё ок.
    (d.*pBase)();        // Вызывается функция класса-наследника. Почему?    
}
... << RSDN@Home 1.1.0 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.