C 學習筆記(十六) 繼承

2021-10-14 17:04:49 字數 2520 閱讀 1997

繼承的好處:減少重複**

語法

class 子類(派生類) :繼承方式 父類(基類)

三種繼承方式:

public 繼承(公有繼承)

父類中的public許可權在子類中是public許可權

父類中的protected許可權在子類中是protected許可權

父類中的private許可權在子類中不可訪問

protected 繼承(保護繼承)

父類中的public許可權在子類中是protected許可權

父類中的protected許可權在子類中是protected許可權

父類中的private許可權在子類中不可訪問

private繼承(私有繼承)

父類中的public許可權在子類中是private許可權

父類中的protected許可權在子類中是private許可權

父類中private許可權在子類中不可訪問

父類中所有非靜態成員屬性都會被子類繼承下去

父類中的私有成員被子類繼承了,但是被編譯器隱藏了,不能被訪問

class

base

;class

person

:public base;.

..cout<<

sizeof

(person)

<

//person的大小是16

通過vs自帶工具檢視類的物件模型工具:

命令語句:

cl[空格]/d1[空格]reportsingleclasslayout類名[空格]「檔名.cpp」

顯示結果:

先構造父類,再構造子類

先析構子類,再析構父類

同名成員變數

語法

訪問子類的成員變數,物件.成員名

訪問父類的成員變數,物件.父類名::成員名

class

base};

class

person

:public base};

...person p;

cout<

cout<

<:a>

同名成員函式

語法

訪問子類的成員函式,物件.函式名

訪問父類的成員函式,物件.父類名::函式名

class

base

void

test

(int a)};

class

person

:public base

void

test()

};intmain()

靜態成員

靜態成員變數

語法

訪問子類的靜態成員變數,物件.靜態成員名

訪問父類的靜態成員變數,物件.父類名::靜態成員名

class

base

;class

person

:public base

;int base::a=

100;

int person::a=

200;

intmain()

通過類名訪問

class

base

;class

person

:public base

;int base::a=

100;

int person::a=

200;

intmain()

語法:class 子類 :繼承方式 父類,繼承方式 父類

c++語法中允許繼承多個類,多個父類中的同名成員通過作用域區分。

實際開發中不太建議多繼承

菱形繼承帶來的問題

b繼承了a的資料,c繼承了a的資料,當d使用a的資料時,會產生二義性

d繼承了a的資料繼承了兩份,不需要繼承兩份

解決方法:

虛繼承

被虛繼承的父類稱為虛基類

語法:class 子類 :virtual 繼承方式 父類

實現方式:從虛基類繼承乙個虛基類指標而不是乙份資料,虛基類指標指向乙個虛基類表,虛基類表中記錄的是資料儲存位置的偏移量。對於從同一虛基類虛繼承的不同子類來說,訪問虛基類中的乙個資料訪問的是記憶體中同乙個位置的資料。

c 學習筆記十六

c with classes 盡量以const enum inline 替換 define 示例 define aspect ratio 1.653 不進入記號表 symbol table 替換為const aspectratio 1.653 進入記號表 定義常量字串 const std strin...

C 繼承學習筆記

派生類從基類繼承了保護 protected 成員和公有 public 成員函式,但是繼承不了基類的過載建構函式。定義乙個如下基類 class counter counter operator counter n void reset int getcount int getnum counter c...

C 學習筆記 繼承

一 c 中的繼承方式會影響子類的對外訪問屬性 public 修飾的成員變數 方法 在類的內部 類的外部都能使用 protected 修飾的成員變數方法,在類的內部使用,在繼承的子類中可用 private 修飾的成員變數方法,只能在類的內部使用 二 private成員在子類中依然存在,但是卻無法訪問到...