Не могу понять логику работы компилятора (см. комментарии).
Компилировал на 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 >>