Let's see this code:
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;
}
The output is:
CBase::vfunc()
But I want to see: CChild::vfunc()
Explicit ((CChild*)pBase) casts to type "CChild*". So why to call derived vfunc() I need replace "important" string with: ((CChild*)pBase)->CChild::vfunc();
 
     
     
     
    