多重繼承

除了單一繼承:

class A {};
class B : public A {};

你還可以擁有多個繼承:

class A {};
class B {};
class C : public A, public B {};

C 現在將同時繼承 AB

注意:如果在多個繼承的 classs 或 structs 中使用相同的名稱,這可能會導致歧義。小心!

多重繼承中的歧義

在某些情況下,多重繼承可能會有所幫助,但有時在使用多重繼承時遇到奇怪的問題。

例如:兩個基類具有相同名稱的函式,在派生類中不會被覆蓋,如果使用派生類的物件編寫程式碼來訪問該函式,編譯器會顯示錯誤,因為它無法確定要呼叫的函式。這是多繼承中這種歧義的程式碼。

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.
}