は、私はこの質問がありました仮想基底クラスと継承
#include <iostream>
using namespace std;
class base
{
public:
base()
{
cout << "ctor in base class\n";
}
};
class derived1 : public base
{
public:
derived1()
{
cout <<"ctor in derived class\n";
}
};
int main()
{
derived1 d1obj;
return 0;
}
この質問を見つけました: - d1objが作成されると、制御は最初の基底クラスのコンストラクタに達し、それが派生しに行きますクラスのコンストラクタ?それとも逆のことですか?最初に派生クラスのコンストラクタに到達し、それが基底クラスを持つことがわかり、コントロールが基底クラスのコンストラクタに移動しますか?
とaswerの一部を含有クラスが仮想塩基を有する場合、コンストラクタが放出される2人の異なる機能体を生じるすることが一般的です - このクラスは、最も派生型である場合に使用するための1つ、及びこのクラスが基本クラスである場合に使用するクラスその理由は、仮想基底クラスが最も派生したクラスによって構築されているため、共有されると一度しか構築されないためです。したがって、コンストラクタの最初のバージョンはすべての基本クラスコンストラクタを呼び出しますが、2番目のバージョンは非仮想ベースのコンストラクタのみを呼び出します。
誰でも私にこの例を説明できますか?クラスは、それが放出されている二つの異なる機能本体につながるために、コンストラクタのための共通の仮想基盤がある場合
Hereは、」その質問
あなたの例には仮想基本クラスがないため、質問の太字のイタリック体の説明には使用できません。これは、クラスが派生する2つのクラスが同じ基本クラスを持つ仮想継承(「ダイアモンド継承」)専用のコンストラクタをコンパイラがどのように構築するかの特別なケースです。私は10年以上のプログラミングでC++を使用する必要はありませんでした(「ここでは仮想継承の例」を除く) –