C 基礎學習10 繼承

2022-07-07 20:00:18 字數 4077 閱讀 8664

繼承是類與類之間的關係,是乙個很簡單很直觀的概念,與現實世界中的繼承(例如兒子繼承父親財產)類似。

繼承可以理解為乙個類從另乙個類獲取方法(函式)和屬性(成員變數)的過程。如果類b繼承於類a,那麼b就擁有a的方法和屬性。被繼承的類稱為父類或基類,繼承的類稱為子類或派生類。

在上一章中我們例舉了不少book類相關的示例,book類中有兩個成員變數:title和price,即書的名字和**。如果此時我們要按照程式語言將這些書進行分類,此時我們需要第三個成員變數language,這個時候我們沒有必要重新設計乙個全新的類,只需要在book類的基礎上加上language屬性及其相關的方法即可。

此時就可以將我們需要的codingbook類繼承book類就可以得到book類的成員變數及成員函式,繼承後在新增需要的language屬性和相關的方法。新類codingbook叫做book類的派生類或子類,而原有的book類則稱為基類。派生類codingbook除了能夠擁有基類book的所有資料成員和成員函式之外,還可以擁有基類沒有的language成員變數及其相關成員函式。

由於派生類可以將基類的**繼承過來,無需重新設計,因而繼承解決了**重用的問題,大大提高了軟體的開發效率。同時如果這些**在基類中執行無誤,則繼承之後到派生類中執行也是不會有問題的。

繼承並非只能進行一層,可以是任意層次的。比如codingbook繼承自book類,如果我們需要對codingbook類繼續新增某一新屬性時,同樣可以設計乙個類繼承自codingbook類。

從book類中派生出codingbook類的語法如下例所示。

例1:

enum

language;

class

book

;class codingbook : public

book

private

: language lang;

};為了方便起見,我們先在類定義前宣告了乙個全域性的列舉型別language,用於表示程式語言。book類我們已經很熟悉了,關鍵是codingbook類的定義。在定義codingbook類時多出了「:

public

book」,除此之外codingbook類的定義和上一章介紹的類定義方法沒有什麼差別。其中關鍵字public指明繼承方式屬於公有繼承,book為被繼承的類名。採用公用繼承方式,則基類的公有成員變數和成員函式的屬性繼承到派生類後不發生變化。例如book類的公有的setprice和settitle成員函式繼承到codingbook類後,這兩個成員變數的屬性仍將是public屬性。如果在繼承過程中不指名繼承方式時,編譯器系統會預設繼承方式為private或protected屬性。

在本例中因為已經定義過乙個book類,具有book類的基本屬性:書名和書的**。現在需要乙個新的類codingbook來描述程式設計類書籍,為此我們繼承book類中的所有成員及成員函式,並新增language屬性及相應的操作函式。雖然我們可以繼承到book類的私有成員,但是book類的私有成員變數在派生類中我們是無法直接訪問的,只能通過間接的方式訪問。間接訪問則是通過getprice、gettitle、setprice和settitle函式來實現的,因為這些函式在派生類中是public屬性的。如下表所示為codingbook類中的所有成員的一覽。

codingbook類成員 成員屬性 **

price 不可訪問 繼承自book類

title 不可訪問 繼承自book類

lang

private

codingbook新增

setprice

public

繼承自book類

settitle

public

繼承自book類

getprice

public

繼承自book類

gettitle

public

繼承自book類

dispaly

public

繼承自book類

setlang

public

codingbook新增

getlang

public codingbook新增

c++繼承方式:

從基類派生出派生類,派生類繼承基類的繼承方式有三種:public、protected和private。在未指定的情況下編譯器會預設繼承方式為protected或private方式。

1) public繼承方式

• 基類中所有public成員在派生類中為public屬性;

• 基類中所有protected成員在派生類中為protected屬性;

• 基類中所有private成員在派生類中不可訪問。

• 具體示例可以參考上一節中的例1,在此就不再重新舉例了。

2) protected繼承方式

• 基類中的所有public成員在派生類中為protected屬性;

• 基類中的所有protected成員在派生類中為protected屬性;

• 基類中的所有private成員在派生類中仍然不可訪問。

例1:

enum language;

class book

;class codingbook : protected book

private:

language lang;

};本類同樣使用上一節中的示例,此時繼承方式改為了protected繼承,我們再來分析一下codingbook中類成員的屬性問題,具體見下表。

codingbook類成員

成員屬性

**price

不可訪問

繼承自book類

title

不可訪問

繼承自book類

lang

private

codingbook新增

setprice

protected

繼承自book類

settitle

protected

繼承自book類

getprice

protected

繼承自book類

gettitle

protected

繼承自book類

dispaly

protected

繼承自book類

setlang

public

codingbook新增

getlang

public

codingbook新增

3) private繼承方式

• 基類中的所有public成員在派生類中均為private屬性;

• 基類中的所有protected成員在派生類中均為private屬性;

• 基類中的所有private成員在派生類中均不可訪問。

例2:

enum language;

class book

;class codingbook : private book

private:

language lang;

};同樣,我們來分析一下本例中的codingbook類中所有成員的成員屬性,具體見下表。

codingbook類成員

成員屬性

**price

不可訪問

繼承自book類

title

不可訪問

繼承自book類

lang

private

codingbook新增

setprice

protected

繼承自book類

settitle

protected

繼承自book類

getprice

protected

繼承自book類

gettitle

protected

繼承自book類

dispaly

protected

繼承自book類

setlang

public

codingbook新增

getlang

public

codingbook新增

c 基礎學習彙總 繼承

封裝,繼承,多型。這是物件導向的思想,也可以說是最基本的東西。說到繼承,直接的說他就是物件導向中類與類之間的一種關係。通過繼承,使得子類具有父類公有的受保護訪問許可權的屬性和方法,同時子類可以通過加入新的屬性和方法或者修改父類的屬性和方法建立新的類層次。繼承機制體現了物件導向技術中的復用性,擴充套件...

C 基礎學習筆記06 繼承

利用繼承,減少重複 1.1 基本語法 class animal class dog public animal 1.2 繼承方式繼承語法 class 子類 繼承方式 父類 繼承方式 公共繼承 保護繼承 私有繼承 父類中所有非靜態成員屬性都會被子類繼承下去 父類中私有成員屬性是被編譯器給隱藏了,因此是...

C 基礎 繼承

繼承class 派生類 訪問限定符 基類 public protected private 類成員函式 友元函式 子類函式 類物件 子類繼承類父類所有的成員變數和成員函式。與訪問限定 符無關。訪問限定符只是限制了訪問。子類訪問父類成員變數,把父類成員變數訪問限制符,改為 protected 子類內部...