Как вызвать виртуальную функцию производного класса через указатель базового класса

Давайте посмотрим на этот код:

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 ();

5
задан LEXX 10 August 2012 в 18:52
поделиться