このコードを見てみましょう:
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(); に置き換える必要があります。