高端裝修公司名稱seo推廣優(yōu)化培訓(xùn)
????????在本文中,您將學(xué)習(xí)C ++編程中的不同繼承模型:帶有示例的多繼承,多層和分層繼承。
繼承是面向?qū)ο缶幊陶Z言的核心功能之一。它允許軟件開發(fā)人員從現(xiàn)有的類派生一個(gè)新的類。派生類繼承基類(現(xiàn)有類)的功能。C ++編程中有多種繼承模型。
C ++多層繼承
????????在C ++編程中,不僅可以從基類派生一個(gè)類,還可以從派生類派生一個(gè)類。這種繼承形式稱為多層繼承。
class A
{
... .. ...
};
class B: public A
{
... .. ...
};
class C: public B
{
... ... ...
};
這里,類B派生自基類A,類C派生自派生類B。
示例1:
#include <iostream>
using namespace std;class A
{public:void display(){cout<<"基類的內(nèi)容。";}
};class B : public A
{};class C : public B
{};int main()
{C obj;obj.display();return 0;
}
輸出結(jié)果:
基類的內(nèi)容。
分析:
????????在這個(gè)程序中,C類是從B類派生出來的(B類是從基類A派生出來的)。C類的obj對象在main()函數(shù)中定義。調(diào)用display()函數(shù)時(shí),將執(zhí)行類A中的display()。 這是因?yàn)樵贑類和B類中沒有display()函數(shù)。編譯器首先在類C中查找display()函數(shù)。由于該函數(shù)在該類中不存在,因此它將在類B中查找該函數(shù)(因?yàn)镃是從B派生的)。這個(gè)display()函數(shù)在B類中也不存在,所以編譯器在A類中尋找它(因?yàn)锽是從A派生出來的)。如果C中存在display()函數(shù),則編譯器將覆蓋類A的display()(因?yàn)槌蓡T函數(shù)覆蓋)。
C ++多重繼承
????????在C ++編程中,一個(gè)類可以從多個(gè)父類派生。 例如:Bat類是從Mammal和WingedAnimal基類派生的。 這很有意義,因?yàn)轵鸺仁遣溉閯?dòng)物(Mammal)又是有翅膀的動(dòng)物(WingedAnimal)。
示例2:
#include <iostream>
using namespace std;class Mammal {public:Mammal(){cout << "哺乳動(dòng)物可以直接出生。" << endl;}
};class WingedAnimal {public:WingedAnimal(){cout << "有翼的動(dòng)物能拍動(dòng)翅膀。" << endl;}
};class Bat: public Mammal, public WingedAnimal {};int main()
{Bat b1;return 0;
}
輸出結(jié)果:?
哺乳動(dòng)物可以直接出生。 有翼的動(dòng)物能拍動(dòng)翅膀。
多重繼承中的歧義
????????多重繼承最明顯的問題發(fā)生在函數(shù)重寫期間。假設(shè)兩個(gè)基類具有相同的函數(shù),但在派生類中未重寫該函數(shù)。如果嘗試使用派生類的對象調(diào)用該函數(shù),則編譯器將顯示錯(cuò)誤。這是因?yàn)榫幾g器不知道要調(diào)用哪個(gè)函數(shù)。例如,
class base1
{public:void someFunction( ){ .... ... .... }
};
class base2
{void someFunction( ){ .... ... .... }
};
class derived : public base1, public base2
{};int main()
{derived obj;obj.someFunction() // 錯(cuò)誤!
}
報(bào)錯(cuò)位置:?
這個(gè)問題可以通過使用范圍解析函數(shù)來指定哪個(gè)函數(shù)屬于base1或base2類來解決:
int main()
{obj.base1::someFunction( ); // 調(diào)用base1類的函數(shù)obj.base2::someFunction(); // 調(diào)用base2類的函數(shù)
}
C ++分層繼承
????????如果從基類繼承多個(gè)類,則稱為分層繼承。在分層繼承中,子類中共有的所有功能都包括在基類中。例如:物理,化學(xué),生物學(xué)均來自科學(xué)課。
class base_class {... .. ...
}class first_derived_class: public base_class {... .. ...
}class second_derived_class: public base_class {... .. ...
}class third_derived_class: public base_class {... .. ...
}