私はその出力を尋ねるこの質問に出くわしました。
#include<iostream>
using namespace std;
class A{
public:
int i;
A(int j=3):i(j){}
};
class B:virtual public A{
public:
B(int j=2):A(j){}
};
class C:virtual public A{
public:
C(int j=1):A(j){}
};
class D:public B, public C {
public:
D(int j=0):A(j), B(j+1), C(j+2){}
};
int main()
{
D d;
cout<<d.i;
return 0;
}
わからなかったことがいくつかあります。これらの疑問を明確にしてください。何を検索すればよいかわからなかったため、グーグルできませんでした。
Q1。コードと同様に、パラメーター化されたコンストラクターが使用されます。colon(:)の直後に、親クラスのコンストラクターを記述します。
A(int j=3):i(j){}
使用されている?私はクラスではないので。
Q2。クラスDでは、クラスのコンストラクターが基本クラスの初期化にコンストラクターを使用していますが、すべてのコンストラクターがクラスAの変数iのみを変更していることがわかります。次に、ここで呼び出すコンストラクターのシーケンスは何ですか。
親クラスのコンストラクターを呼び出さない場合は明示的に呼び出され、順序はよく知られていますが、ここのように暗黙的にコンストラクターを呼び出すとどうなりますか。
Q3。パラメーターが初期化されているにもかかわらず、コンストラクターで送信する値が違いを生むようです。なぜそうなのですか?