仮想関数を理解しようとしていて、次のコードに遭遇しました。派生クラスのコンストラクタを基本クラスのポインタに代入
class Base
{
public:
void Method1() { std::cout << "Base::Method1" << std::endl; }
virtual void Method2() { std::cout << "Base::Method2" << std::endl; }
};
class Derived : public Base
{
public:
void Method1() { std::cout << "Derived::Method1" << std::endl; }
void Method2() { std::cout << "Derived::Method2" << std::endl; }
};
Base* obj = new Derived();
// Note - constructed as Derived, but pointer stored as Base*
obj->Method1(); // Prints "Base::Method1"
obj->Method2(); // Prints "Derived::Method2"
最後に、派生クラスのコンストラクタでBaseクラスのポインタを初期化する方法を教えてください。
関連:http://stackoverflow.com/questions/4937180/a-base-class-pointer-can-point-to-a-derived-class-object-why-is-the-vice-versa – NathanOliver