多重繼承
除了單一繼承:
class A {};
class B : public A {};
你還可以擁有多個繼承:
class A {};
class B {};
class C : public A, public B {};
C
現在將同時繼承 A
和 B
。
注意:如果在多個繼承的 class
s 或 struct
s 中使用相同的名稱,這可能會導致歧義。小心!
多重繼承中的歧義
在某些情況下,多重繼承可能會有所幫助,但有時在使用多重繼承時遇到奇怪的問題。
例如:兩個基類具有相同名稱的函式,在派生類中不會被覆蓋,如果使用派生類的物件編寫程式碼來訪問該函式,編譯器會顯示錯誤,因為它無法確定要呼叫的函式。這是多繼承中這種歧義的程式碼。
class base1
{
public:
void funtion( )
{ //code for base1 function }
};
class base2
{
void function( )
{ // code for base2 function }
};
class derived : public base1, public base2
{
};
int main()
{
derived obj;
// Error because compiler can't figure out which function to call
//either function( ) of base1 or base2 .
obj.function( )
}
但是,使用範圍解析函式可以解決此問題,以指定要對 base1 或 base2 進行分類的函式:
int main()
{
obj.base1::function( ); // Function of class base1 is called.
obj.base2::function( ); // Function of class base2 is called.
}