下面的代碼有什麼問題,解決方案是什麼?
class A{
public:
int a;
};
class B: public A{
public;
int b;
};
class C:public A,public B{
};
答:
上面的代碼對於中C所繼承的B也繼承了A。事實上就是重複繼承。對於編譯器來說,上面的定義可以通過。但是,下面的代碼卻會報錯。
C test;
test.a = 10;//包編譯錯,因爲a不知道是c第一個父類的變量,還是第二個的變量。
解決方案:
class A{
int a;
};
class B: public virtual A{
int b;
};
class C:public virtual A,public B{
};