私は次のコードは、100を印刷した理由を説明してください、次の構造体なぜ次のコードが100を出力するのですか?
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) {}
};
を持っている:(10 + 0)
C* c = new C();
私はそれが1111年に印刷すべきだと思う: 最初のA():I = 0 その後、B1は():I = 1とプリントB1::f()
から11 その後、B2(): - 私は間違って行く11
プリントがB1::f()
を出力しますか?
ありがとうございました
印刷文に改行を追加することで、問題を明確にするのに役立ちます。 –
-1まず、すばらしい[google](http://www.google.co.uk/search?q=c%2B%2B+are+struct+members+public+or+private)を行う価値があります。 [wikipediaエントリー](http://en.wikipedia.org/wiki/C%2B%2B_classes#Differences_between_struct_and_classes_in_C.2B.2B)はこれを簡単に答えています。 –
-1、デクリメントが悪い、今は '10'か' 100'を出力しますか?あなたの質問をどうやってもっと正確にしてください。 –