0

次のコードでは、C クラスの構築は、A、B1、B2、最後に C クラスの初期化から始まります。ただし、B1 と B2 を初期化するとき、デバッガーは A(1) と A(2) の初期化 (B1 と B2 の初期化リストにこの順序で表示される) を無視しましたが、B2(3) の初期化は無視しませんでした。 C初期化リストで。

Why is that?

Thanks in advance.

Here is the code:

struct A { 
    int i; 
    A() { i = 0; } 
    A(int _i) : i(_i) {} 
    virtual void f() { cout << i; } 
}; 

struct B1 : virtual A { 
    B1() : A(1) { f(); } 
    void f() { cout << i+10; } 
}; 

struct B2 : virtual A { 
    B2(int i) : A(2) { f(); } 
}; 

struct C : B1, B2 { 
    C() : B2(3) {} 
};

int _tmain(int argc, _TCHAR* argv[])
{
    C* c = new C();
    return 0;
}
4

2 に答える 2