間違っているかもしれませんが、これは非常に基本的な質問のようです。突然、継承チェーンが機能しなくなりました。小さな基本的なテスト アプリケーションを作成したことで、間違っていたのは私であることが証明されました (したがって、コンパイラを責めることはできません)。
仮想関数でデフォルトの動作をする基本クラスがあります。子クラスはそれから派生し、動作を変更します。
#include <iostream>
class Base
{
public:
Base() { print(); }
~Base() {}
protected:
virtual void print() { std::cout << "base\n"; }
};
class Child : public Base
{
public:
Child() {}
~Child() {}
protected:
virtual void print() { std::cout << "child\n"; }
};
int main()
{
Base b;
Child c;
}
これは以下を出力します:
base
base
Child インスタンスが作成されると、なぜ Base::print() が呼び出されるのですか? virtual キーワードを使うことで、関数を派生クラスに置き換えることができると思いました。
どの時点で私は自分自身を混乱させましたか?