- 論壇徽章:
- 0
|
一般來說,C++的繼承類,在構造的時候,優(yōu)先構造其基類。如果有多個基類,那么構造的時候以繼承的順序來做構造。
但是有個例外,就是虛擬繼承,如下:
- #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++標準有沒有規(guī)定,虛擬繼承的部分,其初始化要優(yōu)先呢? 這樣的規(guī)定的存在意義是什么,是為了解決什么實際的問題或者是二義性的問題?
還請大俠指教! |
|