在C++語言中,C++類是提供封裝的邏輯單位,類的每一個對象都包含有描述其自身狀態的數據集合,並且通過接收特定的消息來處理這個數據集合。如果程序設計人員能夠通過增加、修改或替換指定類的部分內容的方法對該類進行剪裁,就可以適應不同的應用,從而在很大程度上增強了數據封裝的價值,而接下來要討論的繼承就完全可以實現這種操作。
繼承是一個進程,通過繼承,一個對象可以獲得另一個對象的屬性包括函數),並可向其中加入屬於自己的一些特征。作為C++語言的一種重要機制,用繼承的方法可以自動為一個類提供來自另一個類的操作和數據結構,進而使程序設計人員在一個一般的類的基礎上很快建立一個新的類,而不必從零開始設計每個類。
當一個類被其他的類繼承時,被繼承的類稱為基類可不是雞肋^_^),又稱為父類。繼承其他類屬性的C++類稱為派生類,又稱為子類。
一般情況下,繼承的進程起源於一個基類的定義,基類定義了其所有派生類的公有屬性。從本質上講,基類具有同一類集合中的公共屬性,派生類繼承了這些屬性,並且增加了自己特有的屬性。從任何已存在的類繼承的實質就是建造新的派生類。
從一個基類派生的繼承稱為單繼承,換句話說,派生類只有一個直接基類。單繼承聲明語句的常用格式為:
- class 派生類名: 訪問控制關鍵字 基類名
- {
- 數據成員和成員函數聲明
- };
與此相對地,從多個基類派生的繼承稱為多繼承或多重繼承,也就是說,一個派生類有多個直接基類。在某些面向對象的語言如Java)中不支持類間的多重繼承而只支持單重繼承,即一個類至多只能有一個直接父類,因此實現類似的功能需要借助接口等其他機制。而在C++中提供了多重繼承的語法支持,使得問題變得簡單了許多。多重繼承聲明語句的常用格式為:
- class 派生類名: 訪問控制關鍵字 基類名1, 訪問控制關鍵字 基類名2,...
- {
- 數據成員和成員函數聲明
- };
除了多重繼承之外,一個派生類繼承多個基類還有一種方法,就是把派生類作為基類再次供別的類繼承,產生多層次的繼承關系。例如類A派生類B,類B派生類C,則稱類A是類B的直接基類,類B是類C的直接基類,類A是類C的間接基類。
類的層次結構也叫做繼承鏈。還是上面的例子,當建立C++類的對象時,類A的構造函數最先被調用,接下來被調用的是類B的構造函數,最後是類C的構造函數。析構函數的調用順序正好相反。當一個派生類繼承有層次的類時,繼承鏈上的每個派生類必須將它需要的變量傳遞給它的基類。