C++語言中有一個很重要的特性:Private派生確保C++基類中的方法只能被派生類的對象的方法間接使用,而不能被外部使用,除非這些方法已經被重新定義,下面就進行詳細說明。
繼承是一個進程,通過繼承,一個對象可以獲得另一個對象的屬性包括函數),並可向其中加入屬於自己的一些特征。作為C++語言的一種重要機制,用繼承的方法可以自動為一個類提供來自另一個類的操作和數據結構。
進而使程序設計人員在一個一般的類的基礎上很快建立一個新的類,而不必從零開始設計每個類。當一個類被其他的類繼承時,被繼承的類稱為基類,又稱為父類。繼承其他類屬性的類稱為派生類,又稱為子類。
一般情況下,繼承的進程起源於一個C++基類的定義,基類定義了其所有派生類的公有屬性。從本質上講,基類具有同一類集合中的公共屬性,派生類繼承了這些屬性,並且增加了自己特有的屬性。從任何已存在的類繼承的實質就是建造新的派生類。
從一個基類派生的繼承稱為單繼承,換句話說,派生類只有一個直接C++基類。單繼承聲明語句的常用格式為:
- class 派生類名: 訪問控制關鍵字 基類名
- {
- 數據成員和成員函數聲明
- };
與此相對地,從多個基類派生的繼承稱為多繼承或多重繼承,也就是說,一個派生類有多個直接基類。在某些面向對象的語言如Java)中不支持類間的多重繼承而只支持單重繼承,即一個類至多只能有一個直接父類,因此實現類似的功能需要借助接口等其他機制。而在C++中提供了多重繼承的語法支持,使得問題變得簡單了許多。多重繼承聲明語句的常用格式為:
- class 派生類名: 訪問控制關鍵字 基類名1, 訪問控制關鍵字 基類名2,...
- {
- 數據成員和成員函數聲明
- };
除了多重繼承之外,一個派生類繼承多個基類還有一種方法,就是把派生類作為基類再次供別的類繼承,產生多層次的繼承關系。例如類A派生類B,類B派生類C,則稱類A是類B的直接基類,類B是類C的直接基類,類A是類C的間接基類。
類的層次結構也叫做繼承鏈。還是上面的例子,當建立類C的對象時,類A的構造函數最先被調用,接下來被調用的是類B的構造函數,最後是類C的構造函數。析構函數的調用順序正好相反。當一個派生類繼承有層次的類時,繼承鏈上的每個派生類必須將它需要的變量傳遞給它的基類。
在繼承聲明語句中,訪問控制關鍵字用於說明在基類定義中所聲明的成員和成員函數能夠在多大范圍內被派生類所訪問。訪問控制關鍵字可為public, private或protected。如果訪問控制關鍵字為public。
則稱派生類從C++基類公有繼承,也稱公有派生。如果訪問控制關鍵字為private,則稱派生類從C++基類私有繼承,也稱私有派生。現在筆者將公有繼承和私有繼承的具體區別列表如下。
通過上表,我們可以將兩種派生的特點總結如下:
基類成員 基類private成員 基類public成員
派生方式
private public private public 派生類成員 不可見 不可見 可見 可見 外部函數 不可見 不可見 不可見 可見