#include <iostream>
using
namespace
std;
class
A
{
public
:
A () {} ;
A (
int
a ) {
this
->a = a ;
cout <<
"A::A()"
<<
" "
<<
this
->a << endl ;
}
int
a ;
};
class
B :
virtual
public
A
{
public
:
B () {} ;
B (
int
b ) :A ( 0 ) {
this
->b = b ;
cout <<
"B::B()"
<<
" "
<<
this
->b << endl ;
}
int
b ;
};
class
C :
public
B
{
public
:
C () : B ( 1 ) , A ( 2 ) {
cout <<
"C::C()"
<< endl ;
}
int
c ;
};
int
main()
{
C c;
return
0;
}
除了虛擬繼承下來的祖先類,,其它的都不可以,。
這暴露了你設(shè)計中有瑕疵。如果C繼承于B,,B繼承于A,,那如果對了A的某個構(gòu)造函數(shù)a1,,假如B沒有提供相應(yīng)的構(gòu)造手段,就是說明B不想被人那樣繼承,。
你要么應(yīng)該修改B,,提供相應(yīng)的構(gòu)造方法來完成這種參數(shù)的傳遞,要么應(yīng)該根據(jù)新的需求增加一個與B平行的B1類,。
我的需求是:
C的構(gòu)造函數(shù)要依次走A->B->C的構(gòu)造函數(shù),虛繼承就不行了,走不到B
A的構(gòu)造函數(shù)中要根據(jù)是C或者是B(當(dāng)然還有其他許多)來初始化一些東西
那請問該如何實現(xiàn)?