C++ 中的繼承類型 你應該知道什麼?

已發表: 2023-04-05

你有沒有想過一些流行的軟件系統是如何構建的? 這都要歸功於面向對象編程 (OOP) 中稱為繼承的強大機制。 繼承允許程序員在現有類的基礎上創建新類,從而實現代碼重用和高效的軟件開發。 想像一下,您正在構建一個需要多個類的系統,每個類都有一些共同的屬性和行為。

無需重複編寫相同的代碼,您可以使用繼承來創建基類並從中派生新類,從而節省您的時間和精力。

繼承不僅高效而且通用。 在 C++ 中,有多種類型的繼承,每種都有獨特的優點和用例。

在本文中,我們將全面了解C++ 中的不同類型的繼承,並在整篇文章中提供相關代碼、解釋和實際示例。

目錄

C++ 中不同類型的繼承

C++ 編程語言為其程序員提供了五種不同的繼承選項。 根據上下文和要求,開發人員和程序員可以使用這些繼承類型中的任何一種。

單一繼承

單繼承是 C++ 中最常見的繼承類型。 在單繼承中,派生類繼承自單個基類。 這意味著一個類繼承了基類的所有公共和受保護的數據成員和成員函數,同時具有添加自己的數據成員和成員函數的能力。

查看下面的代碼片段,了解單繼承的語法和理解:

// 基類

類動物{

民眾:

空吃(){

std::cout << “動物正在吃東西” << std::endl;

}

};

//派生類

狗類:公共動物{

民眾:

空樹皮(){

std::cout << “狗在叫” << std::endl;

}

};

在這個例子中,我們有一個名為Animal的基類,它只有一個成員函數eat()。然後我們定義一個派生類Dog ,它公開繼承自Animal Dog也有自己的成員函數 bark()。通過使用單繼承,Dog可以訪問Animal 類eat() 函數,並使用bark() 函數添加自己的行為

何時在 C++ 中使用單一繼承

程序員可以使用單繼承來創建派生類,為基類添加功能。

例如,您可以在創建涉及不同角色(例如戰士、法師和弓箭手)的遊戲時使用單一繼承。 所有這些角色都有一些共同的屬性和行為,例如生命值、攻擊力和移動速度。 通過使用單繼承,您可以創建一個名為 Character 的基類,其中包含公共屬性和行為,並從中派生每個角色類以添加其獨特的功能。

在多重繼承中,一個派生類可以繼承多個基類。 這意味著一個類可以有多個直接父類。 結果,派生類繼承了每個基類的所有公共和受保護數據成員和成員函數。

下面是多重繼承的例子:

// 基類 1

類形狀{

民眾:

虛擬雙區() = 0;

};

// 基類 2

類顏色{

民眾:

虛擬 std::string getColor() = 0;

};

//派生類

矩形類:公共形狀,公共顏色{

民眾:

雙區域()覆蓋{

返回寬度 * 高度;

}

std::string getColor() 覆蓋 {

返回顏色;

}

私人的:

雙倍寬度 = 5.0;

雙倍高度 = 3.0;

std::string 顏色 = “藍色”;

};

在這個例子中,我們有兩個基類, Shape 和 Color ,每個基類都有它的虛函數。然後我們定義一個繼承自 Shape 和 Color 的派生類Rectangle 。Rectangle覆蓋了兩個基類的虛函數以提供它自己的實現。通過使用多重繼承,Rectangle可以繼承兩個基類ShapeColor的屬性,以創建具有特定顏色和麵積的矩形。

何時在 C++ 中使用多重繼承

當您想要組合來自多個基類的功能時,請使用多重繼承。 例如,考慮一個需要不同類型控件(例如按鈕、複選框和文本框)的 GUI 應用程序。 每種控件類型都有其功能和行為,但它們也共享一些通用功能,例如處理用戶事件和顯示文本。

通過使用多重繼承,您可以創建一個名為Control的包含通用功能的基類,並從中派生每個控件類型,以及包含其特定功能的其他基類。

在分層繼承中,單個基類由多個派生類繼承。 與多重繼承一樣,層次繼承中的派生類獲得基類的所有公共和保護數據成員和成員函數。

下面是一個代碼片段,可以幫助您理解 C++ 中層次繼承的實現:

// 基類

類動物{

民眾:

虛空 makeSound() = 0;

};

// 派生類 1

貓類:公共動物{

民眾:

void makeSound() 覆蓋 {

std::cout << “喵” << std::endl;

}

};

// 派生類 2

狗類:公共動物{

民眾:

void makeSound() 覆蓋 {

std::cout << “Woof” << std::endl;

}

};

在這個例子中,我們有一個名為Animal的基類,它有一個虛函數makeSound()。然後我們定義兩個派生類CatDog ,它們都繼承自Animal 每個派生類都會覆蓋makeSound()函數以提供自己的實現。 使用層次繼承,我們可以創建具有共同行為(例如發出聲音)的不同類型的動物。

何時在 C++ 中使用層次繼承

當您想要創建共享公共功能的多個派生類時,請使用層次繼承。 例如,考慮一個需要不同類型帳戶(如儲蓄帳戶、支票帳戶和信用卡帳戶)的銀行應用程序。 所有這些帳戶類型都有一些共同的屬性和行為,例如帳號、餘額和利率。

通過使用分層繼承,您可以創建一個名為 Account 的基類,其中包含公共屬性和行為,並從中派生每個帳戶類型以添加其獨特的功能。

多級繼承

C++中的多級繼承是一種繼承類型,其中一個派生類被另一個派生類繼承。 在這種情況下,派生類繼承了其直接父類的所有公共和受保護數據成員和成員函數,而直接父類又繼承了自己的父類,依此類推。

以下是如何在 C++ 中以編程方式實現多級繼承:

// 基類

類車輛{

民眾:

無效開始(){

std::cout << “車輛正在啟動” << std::endl;

}

};

// 中間類

類汽車:公共車輛{

民眾:

無效驅動器(){

std::cout << “汽車正在行駛” << std::endl;

}

};

//派生類

類跑車:公共汽車{

民眾:

無效加速(){

std::cout << “跑車正在加速” << std::endl;

}

};

何時在 C++ 中使用多級繼承

當您想要創建一個繼承自另一個派生類並添加其功能的派生類時,請使用多級繼承。 例如,考慮一個軟件系統需要不同類型的車輛,例如汽車、卡車和摩托車。 這些車輛類型具有一些共同的屬性和行為,例如速度、加速度和製動。

通過使用多級繼承,您可以創建一個名為Vehicle的基類,其中包含公共屬性和行為,並從中派生中間類(例如CarTruck)以添加它們的特定功能。然後,您可以Car 類派生SportsCar 類以添加其獨特的功能。

混合繼承是兩種或多種繼承類型的組合。 也稱為虛擬繼承,混合繼承中的一個派生類繼承自多個基類,其中一些基類是通過多條路徑繼承的。 這會創建複雜的繼承層次結構,並且難以理解和維護。

查看 upGrad 的軟件開發課程來提高自己的技能。

下面是C++ 中混合繼承的示例

// 基類 1

類動物{

民眾:

虛空 makeSound() = 0;

};

// 基類 2

類 CanFly {

民眾:

虛空飛行()= 0;

};

// 基類 3

類 CanSwim {

民眾:

虛擬無效游泳()= 0;

};

//派生類

蝙蝠類:公共動物,公共 CanFly {

民眾:

void makeSound() 覆蓋 {

std::cout << “尖叫!”<< 標準::結束;

}

空飛()覆蓋{

std::cout << “蝙蝠在飛” << std::endl;

}

};

//派生類

企鵝類:公共動物,公共 CanSwim {

民眾:

void makeSound() 覆蓋 {

std::cout << “胡克!”<< 標準::結束;

}

無效游泳()覆蓋{

std::cout << “企鵝在游泳” << std::endl;

}

};

探索我們的熱門軟件工程課程

LJMU & IIITB 計算機科學碩士 加州理工學院 CTME 網絡安全證書課程
全棧開發訓練營 區塊鏈PG項目
全棧開發中的執行 PG 計劃
在下面查看我們所有的課程
軟件工程課程

何時在 C++ 中使用混合繼承

除了前面討論的四種繼承類型之外,混合繼承在某些需要多種繼承類型的場景中也很有用。 使用混合繼承來組合多種繼承類型的優點。

例如,考慮一個需要不同類型動物的軟件系統,其中一些可以飛,而另一些可以游泳。 您可以使用混合繼承來創建一個名為Animal的基類,並從中派生兩個中間類CanFlyCanSwim 最後,使用混合繼承,您可以從兩個中間類派生BatPenguin類。 Bat繼承自AnimalCanFly ,而Penguin類繼承自AnimalCanSwim 這樣,您就可以創造出具有獨特能力組合的不同類型的動物。

C++ 中的混合繼承在需要多種繼承類型的複雜軟件系統中非常有用。 但是,它也會創建複雜的繼承層次結構,難以理解和維護。 與其他類型的繼承一樣,為您的特定軟件開發項目要求和設計目標選擇正確的類型是至關重要的。

閱讀我們與軟件開發相關的熱門文章

查看我們的免費技術課程,在競爭中脫穎而出。

使用繼承時要記住的重要事項:

雖然繼承是 C++ 中的一種強大機制,但在實現時也有一些因素需要考慮。

  1. 避免深繼承層次結構:深繼承層次結構會導致代碼難以閱讀、理解和維護。使您的繼承層次結構盡可能淺,以提高代碼的可讀性和可維護性。
  2. 明智地使用訪問修飾符:訪問修飾符(public、protected 和 private)控制類中數據成員和成員函數的可見性。明智地使用它們以避免暴露不應在類外部可見的實現細節。
  3. 避免菱形繼承:當一個類繼承自兩個繼承自同一基類的類時,就會發生菱形繼承。這會導致歧義,通常最好避免。
  4. 避免過度使用繼承:雖然繼承很有用,但避免過度使用它很重要。在某些情況下,組合或其他設計模式可能是更好的選擇。

探索我們的軟件開發免費課程

雲計算基礎 從零開始的 JavaScript 基礎 數據結構和算法
區塊鏈技術 初學者反應 核心 Java 基礎知識
爪哇 初學者的 Node.js 高級JavaScript

帶走

總而言之,繼承是C++編程中一個至關重要的概念,每個編程學生都應該掌握。 通過了解不同類型的繼承及其用例,您可以創建高效、有組織且可維護的代碼,從而成為更好的軟件開發人員。

如果您覺得這篇文章很有趣,您可以通過註冊upGrad與 IIIT Bangalore 合作提供的 DevOps 認證計劃來進一步增強您的軟件開發知識。 本課程涵蓋軟件開發的各個方面,包括編碼、測試和部署,可以幫助您成為業內熟練的軟件開發人員。

為什麼繼承在 C++ 編程中很重要?

利用繼承,程序員可以節省軟件開發的時間和精力,有條理地構建複雜的軟件系統。 隨著程序員努力創建更具可讀性的代碼,編碼過程簡化為流形。

在 C++ 編程中使用繼承時要記住哪些重要事項?

在 C++ 編程中使用繼承時,必須牢記一些關鍵事項,例如避免深度繼承層次結構、明智地使用訪問修飾符、避免菱形繼承以及不要過度使用繼承。

我的軟件開發項目應該使用哪種類型的繼承?

選擇正確的繼承類型取決於您特定的軟件開發項目要求和設計目標。 從各種繼承中進行選擇完全取決於您的項目要求。 因此,在繼續之前進行詳細分析。