程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 談談C++私有繼承

談談C++私有繼承

編輯:C++入門知識

談談C++私有繼承


許多C++程序員從來沒用過私有繼承來設計他的類。的確,如果是本該用私有繼承的地方卻用了公有繼承,對程序的功能的實現並無影響。但這種誤用是一種錯位的描述,會引起閱讀者的誤解,甚至會引起類的使用者的茫然。當我們在寫一個類的聲明的時候,實際上是在做一個意圖的設計。而設計者需要的恰恰是精確描述。

私有繼承的弦外之音

要解釋私有繼承,我們先來看看共有繼承,好做個比較。

公有繼承,本質上就是 is-a 的關系。如,描述吉普車是一種車,那麼可以進行以下的設計:

class Car
{
};

class Jeep : public Car
{
}

私有繼承,子類只能在類內部使用父類的功能,而不能將父類的功能以接口的形式開放給外部,也就是說,子類的對象無法直接使用到父類的功能接口。所以,私有繼承的涵義就成了:子類可以借助父類的功能來實現自己的功能。這就是典型的has-a 的關系。

class Engine
{
public:
    void Run();
};

class Car : private Engine
{
public:
    void Drive()
    {
        // let engine go!
        Run();
    }
};
在關系描述上,等同於組合,如:

class Car
{
    ...
private:
    Engine m_engine;
}

私有繼承VS組合

私有繼承帶來過多的程序開銷,而組合卻是短平快,所以一般來說,設計者想描述Has-A的關系時,組合方式是首選的

但以下兩種方式則必須使用私有繼承:

A類需要使用B類的protected成員函數來實現自己的功能時A類需要重寫B類的虛函數時




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved