- 论坛徽章:
- 0
|
一般来说,C++的继承类,在构造的时候,优先构造其基类。如果有多个基类,那么构造的时候以继承的顺序来做构造。
但是有个例外,就是虚拟继承,如下:
- #include<iostream>
- using namespace std;
- struct Base
- {
- Base(){cout<<"Base"<<endl;}
- };
- struct Derived: virtual Base{
- Derived(){cout<<"Derived"<<endl;}
- };
- struct Derived2: virtual Base{
- Derived2(){cout<<"Derived2"<<endl;}
- };
- struct Derived3: Derived{
- Derived3(){cout<<"Derived3"<<endl;}
- };
- struct Final : Derived2, virtual Derived3
- {
- };
- int main(void)
- {
- Final obj;
- return 0;
- }
复制代码 运行结果是:
Base
Derived
Derived3
Derived2
注意到,Derived3的初始化在Derived2之前。
如果struct Final是直接继承了Derived2和Derived3,那么肯定是Derived2的初始化在Derived3之前的进行的。
C++标准有没有规定,虚拟继承的部分,其初始化要优先呢? 这样的规定的存在意义是什么,是为了解决什么实际的问题或者是二义性的问题?
还请大侠指教! |
|