C++ 多重、多層和分層繼承

在本文中,您將學習C ++編程中的不同繼承模型:帶有示例的多繼承,多層和分層繼承。

繼承是面向對象編程語言的核心功能之一。它允許軟件開發(fā)人員從現(xiàn)有的類派生一個新的類。派生類繼承基類(現(xiàn)有類)的功能。

C ++編程中有多種繼承模型。

C ++多層繼承

在C ++編程中,不僅可以從基類派生一個類,還可以從派生類派生一個類。這種繼承形式稱為多層繼承。

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

這里,類B派生自基類A,類C派生自派生類B。

示例1:C ++多層繼承

#include <iostream>
using namespace std;

class A
{
    public:
      void display()
      {
          cout<<"基類的內容。";
      }
};

class B : public A
{

};

class C : public B
{
 
};

int main()
{
    C obj;
    obj.display();
    return 0;
}

輸出結果

基類的內容。

在這個程序中,C類是從B類派生出來的(B類是從基類A派生出來的)。

C類的obj對象在main()函數(shù)中定義。

調用display()函數(shù)時,將執(zhí)行類A中的display()。 這是因為在C類和B類中沒有display()函數(shù)。

編譯器首先在類C中查找display()函數(shù)。由于該函數(shù)在該類中不存在,因此它將在類B中查找該函數(shù)(因為C是從B派生的)。

這個display()函數(shù)在B類中也不存在,所以編譯器在A類中尋找它(因為B是從A派生出來的)。

如果C中存在display()函數(shù),則編譯器將覆蓋類A的display()(因為成員函數(shù)覆蓋)。

C ++多重繼承

在C ++編程中,一個類可以從多個父類派生。 例如:Bat類是從Mammal和WingedAnimal基類派生的。 這很有意義,因為蝙蝠既是哺乳動物(Mammal)又是有翅膀的動物(WingedAnimal)。

C ++多重繼承示例

示例2:C ++編程中的多重繼承

#include <iostream>
using namespace std;

class Mammal {
  public:
    Mammal()
    {
      cout << "哺乳動物可以直接出生。" << endl;
    }
};

class WingedAnimal {
  public:
    WingedAnimal()
    {
      cout << "有翼的動物能拍動翅膀。" << endl;
    }
};

class Bat: public Mammal, public WingedAnimal {

};

int main()
{
    Bat b1;
    return 0;
}

輸出結果

哺乳動物可以直接出生。
有翼的動物能拍動翅膀。

多重繼承中的歧義

多重繼承最明顯的問題發(fā)生在函數(shù)重寫期間。

假設兩個基類具有相同的函數(shù),但在派生類中未重寫該函數(shù)。

如果嘗試使用派生類的對象調用該函數(shù),則編譯器將顯示錯誤。這是因為編譯器不知道要調用哪個函數(shù)。例如,

class base1
{
  public:
     void someFunction( )
     { .... ... .... }  
};
class base2
{
    void someFunction( )
     { .... ... .... } 
};
class derived : public base1, public base2
{
    
};

int main()
{
    derived obj;

    obj.someFunction() // 錯誤!  
}

這個問題可以通過使用范圍解析函數(shù)來指定哪個函數(shù)屬于base1或base2類來解決

int main()
{
    obj.base1::someFunction( );  // 調用base1類的函數(shù)
    obj.base2::someFunction();   // 調用base2類的函數(shù)
}

C ++分層繼承

如果從基類繼承多個類,則稱為分層繼承。在分層繼承中,子類中共有的所有功能都包括在基類中。

例如:物理,化學,生物學均來自科學課。

分層繼承的語法

class base_class {
     ... .. ...
}

class first_derived_class: public base_class {
     ... .. ...
}

class second_derived_class: public base_class {
     ... .. ...
}

class third_derived_class: public base_class {
     ... .. ...
}
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清