0

仮想継承について質問があります。このコードが 3 (クラス「1」から) ではなく 1000 (クラス「2」から) を出力する理由に興味があります。

コードは次のとおりです。

#include <iostream>
using namespace std;

class A {
protected:
    int number;
public:
    A (int a=0) {number=a;}
};

class one:virtual public A {
public:
    one (int a=3) {number=a;}
    void print()  {cout<<number<<endl;}
};

class two :virtual public A {
public:    
    two (int a=1000) {number =a;}
    void print() { cout<<number<<endl; }
};

class B:public one,public two {
public:
    void print() { cout<<number<<endl; }
};

int main () {
    B A;
    A.print();
}
4

1 に答える 1

2

基本クラスは、宣言された順序で初期化されます: onethen two. 仮想継承とは、両者が の同じインスタンスを共有することを意味するAため、ここで呼び出される変数は 1 つだけnumberです。

初期化oneすると 3 が割り当てられnumber、次に初期化twoすると 1000 が割り当てられます。したがって、オブジェクト全体を初期化した後、値は 1000 になります。

于 2013-06-20T17:43:06.930 に答える