[英]c++ Virtual/Non-virtual Diamond inheritance
在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()
被首先调用? 感谢您的帮助和提前解释。
因为您实际上是在继承B2
,所以编译器将在构造任何非虚拟继承( B1
)之前先构造它,以识别哪些变量在C
中实际上是继承的。 当然,首先要构造A
,因为B2
需要先构造它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.