Давайте посмотрим на этот код:
class CBase
{
public:
virtual vfunc() { cout << "CBase::vfunc()" << endl; }
};
class CChild: public CBase
{
public:
vfunc() { cout << "CChild::vfunc()" << endl; }
};
int main()
{
CBase *pBase = new CBase;
((CChild*)pBase)->vfunc(); // !!! important
delete pBase;
return 0;
}
Вывод:
CBase::vfunc()
Но я хочу видеть :CChild ::vfunc()
Явное приведение ((CChild *)pBase )к типу "CChild *". Так зачем вызывать производную vfunc ()? Мне нужно заменить «важную» строку на: ((CChild *)pBase )->CChild ::vfunc ();