3
私は論理的に答えられない質問があります。なぜ私は、次のコードを実行した後、それを次のとおりです。継承共有メモリ
class foo1
{
private:
int age;
public:
foo1(int _age) :age(_age) {}
void print() { std::cout << age << std::endl; }
};
class foo2 :virtual public foo1
{
int grade;
public:
foo2(int _age, int _grade) :foo1(_age), grade(_grade) {}
};
class foo3 :virtual public foo2
{
private:
int score;
public:
foo3(int _age, int _grade, int _score) :
foo1(_age), foo2(5000, _grade), score(_score) {}
};
int main()
{
foo3 k(77,2,3);
k.print();
}
コンソール出力は、(私が間違っている)5000は、右の出力をだろうと思っための私の理由は、我々は、私が使用している場合ということである77、ではなく5000です。 foo3以下のコンストラクタの初期化子リストが起こる:
は1)foo1ののコンストラクタはfoo2はのコンストラクタは5000に年齢を設定し、その後77
2)の年齢と2のグレードを設定しますなぜなら、foo2はfoo1のコンストラクタを使用しているからです。
なぜfoo2はのコンストラクタは、事実上、継承されたクラスのコンストラクタは、常に最も派生クラスによって呼び出されfoo1の
共有メモリはどこにありますか? –
興味深い質問ですが、実際のアプリケーションではこのコードを使用しないことを祈っています。 – Tim510