基本クラスから派生したクラスがあるとします。ポリモーフィズムを使用すると、(仮想関数を使用して)基本クラスへのポインターを介して派生クラスの関数を呼び出すことができます。つまり、派生クラスのメンバーに、基本クラスのメンバーになりすまして「ふりをする」ことができます。そのことを念頭に置いて、基本クラスがそのコンストラクターで、派生クラスのメンバーを実際に構築することは可能ですか(これにより、基本クラスのメンバーであると「ふりをする」ので、何も壊れません)?論理的には、これが機能しない理由はわかりませんが、構文的にそれを行う方法を理解することはできません。これが不可能な場合は、どうしてですか?
派生クラスのメンバーを作成し、それを基本クラスのメンバーとして返す別の関数を使用できることを知っています。これが不可能になった場合は、これを実行しますが、コンストラクターとして使用する方がクリーンです(これは、この個別の関数が基本的にはそうであるためです)。
編集:これが私が探しているものの例です:
class base
{
base()
{
this=new derived(); //This is what I am looking for
}
virtual func();
};
class derived : public base
{
derived() : base()
{}
func()
{
...
}
};
上記のように、これは次の方法で実現できます。
base *fake_base_constructor()
{
return new derived();
}
実際には、複数の派生クラスがあり、基本クラスコンストラクターはパラメーターに基づいてそれらから選択しますが、概念的には1つだけ必要です。