0

C++ で次のコードがあるとします。

struct A {
    A() { f(0); }
    A(int i) { f(i); }
    virtual void f(int i) { cout << i; }
};
struct B1 : virtual A {
    B1(int i) : A(i) { f(i); }
    virtual void f(int i) { cout << i+10; }
};
struct B2 : virtual A {
    B2(int i) : A(i) { f(i); }
    virtual void f(int i) { cout << i+20; }
};
struct C : B1, virtual B2 {
    int i;
    C() : B1(6),B2(3),A(1){}
    virtual void f(int i) { cout << i+30; }
};

誰かが理由を説明できますかC* c = new C(); 1 23 と 16 をこの順序で出力しますか? どの順序で印刷するかをどのように決定しますか? B1非仮想が最後に呼び出されることはわかっていますがA()、最初に呼び出されるのはなぜですか? 事前に助けと説明をありがとう。

4

1 に答える 1