質問: c++ 継承はポインタじゃないとダメか #include class base { public: virtual void f() { printf("base \n"); } }; class derived : public base { void f() {
回答: 参照でも良いです。 ~例~ base a = base(); const base& b = derived(); a.f(); const_cast(b).f(); 【base b = derived();は何をすることになるのでしょうか?】 derived 型の一時オブジェクトが作成されて、それを基に base 型オブジェクトが生成される形となりますが、 base b = static_cast(derived()); こういった形でコピーコンストラクタが発動することになります。 そして、b は base 型オブジェクトのため、仮想関数 f は base クラス内の f がそのまま使われます。