BがAから派生した場合、たとえばBの新しいオブジェクトを作成すると、Aのコンストラクタが最初に呼び出されることがわかっています。オブジェクトbを破壊すると、Bのデストラクタが最初にコールします。次に、ベースクラスに複数のコンストラクタがある場合、どのコンストラクタが呼び出されるのでしょうか?ここで質問があります。なぜ?派生クラスと基本クラスの間のコンストラクタの呼び出し順序
私は下に1つのテストプログラムを書いていますが、これはBaseクラスのデフォルトのコンストラクタを呼び出すと思いますが、それは単なる偶然であるかどうか分かりません。
#include <iostream>
using namespace std;
class A{
public:
A(int i){cout<<"A con with param"<<endl;}
A(){cout<<"A con"<<endl;}
~A(){}
};
class B : public A
{
public:
B(int i){cout<<"B con with param"<<endl;}
B(){cout<<"B con"<<endl;}
~B(){}
};
int main()
{
B b(5);
return 0;
}
この問題を解明する理由やアドバイスを教えてくれるボスがいるのでしょうか?
あなたの例では、 'A'の空のコンストラクタ(引数なし)を呼び出すように指定していないので、' A'() 'は常に' B'コンストラクタから呼び出されます。同様の質問:http://stackoverflow.com/questions/8093882/using-c-base-class-constructorsまたはhttp://stackoverflow.com/questions/10001524/how-to-force-base-class-constructors-to派生クラスと呼ばれる – birryree