欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中繼承與組合的區(qū)別詳細解析

 更新時間:2013年09月25日 09:34:15   投稿:jingxian  
C++的“繼承”特性可以提高程序的可復用性。正因為“繼承”太有用、太容易用,才要防止亂用“繼承”

C++的“繼承”特性可以提高程序的可復用性。正因為“繼承”太有用、太容易用,才要防止亂用“繼承”。我們要給“繼承”立一些使用規(guī)則:

一、如果類A 和類B 毫不相關,不可以為了使B 的功能更多些而讓B 繼承A 的功能。

不要覺得“不吃白不吃”,讓一個好端端的健壯青年無緣無故地吃人參補身體。

二、如果類B 有必要使用A 的功能,則要分兩種情況考慮:

(1)若在邏輯上B 是A 的“一種”(a kind of ),則允許B 繼承A 的功能。如男人(Man)是人(Human)的一種,男孩(Boy)是男人的一種。那么類Man 可以從類Human 派生,類Boy 可以從類Man 派生。示例程序如下:

復制代碼 代碼如下:

class Human
{
  …
};
class Man : public Human
{
  …
};
class Boy : public Man
{
  …
};

(2)若在邏輯上A 是B 的“一部分”(a part of),則不允許B 繼承A 的功能,而是要用A和其它東西組合出B。例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是頭(Head)的一部分,所以類Head 應該由類Eye、Nose、Mouth、Ear 組合而成,不是派生而成。示例程序如下:

復制代碼 代碼如下:

class Eye
{
public:
  void Look(void);
};
class Nose
{
public:
  void Smell(void);
};
class Mouth
{
public:
  void Eat(void);
};
class Ear
{
public:
  void Listen(void);
};
// 正確的設計,冗長的程序
class Head
{
public:
  void Look(void) { m_eye.Look(); }
  void Smell(void) { m_nose.Smell(); }
  void Eat(void) { m_mouth.Eat(); }
  void Listen(void) { m_ear.Listen(); }
private:
  Eye m_eye;
  Nose m_nose;
  Mouth m_mouth;
Ear m_ear;
};

如果允許Head 從Eye、Nose、Mouth、Ear 派生而成,那么Head 將自動具有Look、Smell、Eat、Listen 這些功能:

// 錯誤的設計
class Head : public Eye, public Nose, public Mouth, public Ear
{
};


上述程序十分簡短并且運行正確,但是這種設計卻是錯誤的。這就開頭所說的很多程序員經不起“繼承”而犯下設計錯誤。

相關文章

  • C++超詳細講解友元與內部類

    C++超詳細講解友元與內部類

    朋友們好,這篇播客我們繼續(xù)C++的初階學習,現(xiàn)在對我們對C++的友元,內部類知識點做出總結,整理出來一篇博客供我們一起復習和學習,如果文章中有理解不當?shù)牡胤?還希望朋友們在評論區(qū)指出,我們相互學習,共同進步
    2022-06-06
  • C++11生成隨機數(shù)(random庫)的使用

    C++11生成隨機數(shù)(random庫)的使用

    隨機數(shù)在很多地方都可以用到,本文主要介紹了C++11生成隨機數(shù)(random庫)的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 使用c++實現(xiàn)OpenCV圖像橫向&縱向拼接

    使用c++實現(xiàn)OpenCV圖像橫向&縱向拼接

    這篇文章主要介紹了使用c++實現(xiàn)OpenCV圖像橫向&縱向拼接,文中有圖像拼接函數(shù),可以實現(xiàn)如“長圖拼接王”這類小程序的類似功能,大家可以將該函數(shù)封裝在軟件中自由使用
    2021-08-08
  • C++歸并排序算法實例

    C++歸并排序算法實例

    這篇文章主要介紹了C++歸并排序算法實例,本文先是介紹了什么是歸并排序,然后給出了實現(xiàn)代碼,需要的朋友可以參考下
    2014-10-10
  • 帶你從編碼角度分析C++重載原理

    帶你從編碼角度分析C++重載原理

    這篇文章主要為大家介紹了從編碼角度分析C++重載原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 一篇文章帶你實現(xiàn)C語言中常用庫函數(shù)的模擬

    一篇文章帶你實現(xiàn)C語言中常用庫函數(shù)的模擬

    這篇文章主要介紹了C語言中常用庫函數(shù)的模擬,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • c++ 巧開平方的實現(xiàn)代碼

    c++ 巧開平方的實現(xiàn)代碼

    如果沒有計算器,我們如何求2的平方根
    2013-05-05
  • C++類的分離式寫法介紹示例

    C++類的分離式寫法介紹示例

    今天小編就為大家分享一篇關于C++類的分離式寫法介紹示例,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Cocos2d-x UI開發(fā)之CCControlSlider控件類使用實例

    Cocos2d-x UI開發(fā)之CCControlSlider控件類使用實例

    這篇文章主要介紹了Cocos2d-x UI開發(fā)之CCControlSlider控件類使用實例,本文代碼中包含大量注釋講解了CCControlSlider控件類的使用,需要的朋友可以參考下
    2014-09-09
  • C++哈希應用之位圖,哈希切分與布隆過濾器詳解

    C++哈希應用之位圖,哈希切分與布隆過濾器詳解

    這篇文章主要為大家詳細介紹了C++哈希應用中的位圖、哈希切分與布隆過濾器,文中的示例代碼講解詳細,具有一定的學習價值,需要的可以參考一下
    2023-04-04

最新評論