以下のプログラムの出力は次のとおりです。55
#include <iostream>
using namespace std;
struct A
{
public:
int myInt;
A(int n): myInt(n){}
A(): myInt(5) {}
};
class B : virtual public A
{
public:
B(int n):A(10) {}
B():A(10) {}
};
class C : virtual public A
{
public:
C(int n):A(3*n) {}
};
class D : public B, public C
{
public:
D(int n=90) : C(2*n), B(n) {}
};
class E : public D
{
public:
E(int n=20):D(n-1) {}
};
int main()
{
D d(100);
cout << d.myInt << endl;
E e;
cout << e.myInt << endl;
return 0;
}
オブジェクトについて考えてみましょうd
。私が理解していることから、継承は(初期化リストではなく)継承リストの順序に基づいて構築されるため、B
クラスは最初にパラメーターを使用100
してクラスA
に移動するパラメーターを使用して構築されます10
。したがって、値をにA
設定します。同じことがクラスにも当てはまり、仮想であるため、数値に設定されます。私は予想していなかった。なぜこうなった?myInt
10
c
myInt
600
5