私の質問は、基本クラスの仮想関数を呼び出すオブジェクトスライスの場合に仮想関数がどのように機能するかを説明するこの質問と、以下のコードの派生クラスの仮想テーブルレイアウトを説明するウィキペディアの記事を参照したものです。
class A{
public:
virtual void func(){ cout<<"\n In A:func";}
};
class B:public A{
public:
virtual void func(){ cout<<"\n In B:func";}
};
main(){
A *ptr1 = new B();
A oA = *ptr1;
oA.func();
}
DerviedClassObjectB:
+0: pointer to virtual method table of B
virtual method table of B:
+0: B::func
上記のプログラムは "In A::func" を出力します。
しかし、クラス B の仮想テーブルが基本クラス A::func を認識していない場合、どうすれば A::func を呼び出すことになりますか?