C 遠征 繼承篇

2021-09-20 10:57:49 字數 3235 閱讀 7789

繼承:

class

worker

:public person

;// person -> 基類/父類

// worker -> 派生類/子類

;

例項化時會先呼叫person()再呼叫worker();銷毀時會先呼叫~worker()再呼叫~person()

即 先呼叫 父類的建構函式, 再呼叫子類的建構函式;先呼叫子類的析構函式,再呼叫父類的析構函式。

公有繼承 :public

繼承的時候將會把父類的 public 繼承,父類的 protected 繼承。

public 屬性可以在任意地方呼叫,而 protected 屬性只能在成員函式中呼叫

對於父類的 private 屬性,子類無法繼承和訪問

公有繼承總結:

保護繼承 :protected

私有繼承 :private

保護繼承和私有繼承均修改了父類的訪問限定符

私有繼承類似於 has a 的關係

隱藏(重寫)

父子關係 成員同名 隱藏

class

person

;

class

soldier

:public person

;

int

main

(void

)void solider::

work()

覆蓋(過載)
class

person

;

class

soldier

:public person

;

父類的宣告,子類的定義

person *p =

new solider;

void

func

(person &p)

// 呼叫時,可以傳入 person 或者 person 的子類

func

(new

solider()

);delete p;

p =null

;// 列印結果:

// marry

// 我是人類

注意:若不加 虛析構函式 ,則釋放記憶體時只會執行person的析構函式,不會執行子類soldier的析構函式;父類加上 虛virtual修飾符後,子類的析構函式在父類呼叫之後也會自動呼叫。

// 會建立臨時物件 p,隨後被銷毀

void

test1

(person p)

// 以下兩個函式並不會產生新的臨時物件,效率更高

void

test2

(person &p)

void

test3

(person *p)

test1

(p);

test1

(s);

test2

(p);

test2

(s);

test2

(&p)

;test2

(&s)

;

多重繼承

即 步兵類 繼承 士兵類,士兵類 繼承 人類。存在隔代 爺孫關係。

多繼承

class

worker

;class

farmer

;class

migrantworker

:public worker,

public farmer //若不寫則為private

;

注意:在例項化migrantworker的時候,會根據初始化列表的順序 分別呼叫父類的建構函式

析構函式順序正好相反

菱形繼承

如此,同時存在了多繼承和多重繼承,當例項化 d 物件的時候,會同時呼叫兩次a 的建構函式,浪費資源。並且在記憶體中會分別維護兩份 person 資料

使用虛繼承可以解決當前問題。

關鍵字: virtual

class

worker

:virtual

public person // 虛基類

;class

farmer

:virtual

public person

;class

migrantworker

:public worker,

public farmer

;

C 遠征之友元函式篇

相信大家都會有點小疑問?何為友元函式難道是friend?那麼他又是怎樣定義的呢?表現形式是什麼?關鍵字又是什麼呢?友元函式與類的成員函式區別?下面就一一給大家介紹一下揭秘中。友元函式的定義 c 程式設計中如果需要訪問非本類的私有成員,那麼就需要用到友元。否則私有成員是無法被外部直接訪問的,而友元可以...

C 遠征之封裝篇(下)

2 2 物件陣列實踐 檔案 class coordinate 檔案 include include coordinate.h using namespace std coordinate coordinate for int j 0 j 3 j p delete p p null system pa...

c 遠征之封裝篇(拷貝建構函式)

拷貝建構函式 示例安排 1.定義乙個array類,資料成員為m icount,成員函式包括資料封裝 建構函式 拷貝建構函式和析構函式,通過此示例體會淺拷貝原理。2.增加資料成員m parr,並增加m parr位址檢視函式,同時改造建構函式 拷貝建構函式和析構函式,體會拷貝的原理和必要性。1.淺拷貝建...