大學C 複習筆記(8)繼承與派生

2021-10-07 14:06:02 字數 2819 閱讀 5081

型別相容規則

(1) 派生類的物件可以賦值給基類物件

(2) 派生類的物件可以初始化基類的引用。

(3) 派生類物件的位址可以賦值給基類的指標。

for example:

class b

;class d: public b

;int main()

在替代之後,派生類物件就可以作為基類的物件使用,但只能使用從基類繼承的成員

#include

using namespacestd;

class

bo//基類b0定義

//公有成員函式};

classb1:

public bo

}classd1:

public b1};

void

fun(bo *ptr)

//引數為指向基類物件的指標

intmain()

派生類的建構函式和析構函式

建構函式: 呼叫基類:按照被繼承時宣告的順序

對派生類新增成員物件初始化:在類中宣告的順序

執行派生類的建構函式體中的內容

#include

using

namespace std;

//基類

class

basea

;basea::

basea

(int a,

int b)

:m_a

(a),

m_b(b)

basea::

~basea()

//基類

class

baseb

;baseb::

baseb

(int c,

int d)

:m_c

(c),

m_d(d)

baseb::

~baseb()

//派生類

class

derived

:public basea,

public baseb

;derived::

derived

(int a,

int b,

int c,

int d,

int e)

:basea

(a, b)

,baseb

(c, d)

,m_e

(e)derived::

~derived()

void derived::

show()

intmain()

析構函式:

基類的析構函式無法繼承下來,派生類重新宣告新的析構函式

先執行析構函式的函式體,然後對派生類新增的型別成員物件進行清理,最後對所有從基類繼承的成員進行清理。

作用域分辨符(::)

如果派生類中宣告了與基類成員函式同名的新函式,即使函式的數表不同,從基類繼承的同名函式的所有過載形式都會被隱藏。

物件名.成員名

物件指標->成員名

class

derived

:public base1,

public base 2()

;int

main()

若derived中未宣告新成員,產生二義性

改為:

class

derived

:public base1,

public base2

;//直接基類b

classb:

public a

;//直接基類c

classc:

public a

;//派生類d

classd:

public b,

public c

//命名衝突

void

setb

(int b)

//正確

void

setc

(int c)

//正確

void

setd

(int d)

//正確

private

:int m_d;};

intmain()

為了解決多繼承時的命名衝突和冗餘資料問題,c++ 提出了虛繼承,使得在派生類中只保留乙份間接基類的成員。

//間接基類a 

classa;

//直接基類b

classb:

virtual

public a

;//直接基類c

classc:

virtual

public a

;//派生類d

classd:

public b,

public c

//正確

void

setb

(int b)

//正確

void

setc

(int c)

//正確

void

setd

(int d)

//正確

private

:int m_d;};

intmain()

C 繼承與派生 學習筆記

一 繼承和派生的基本概念 繼承是c 語言中的一種重要的機制,也是物件導向的乙個重要特徵,實現了物件導向程式設計思想中軟體復用的功能。繼承的實質就是通過現有的類的特徵,構造乙個具有現有類特徵的新類,這個新類成為派生類。派生類是從乙個或者多個以前定義的類 基類 繼承資料和函式,同時增加或者重定義資料和函...

C 繼承與派生 學習筆記

一 繼承和派生的基本概念 繼承是c 語言中的一種重要的機制,也是物件導向的乙個重要特徵,實現了物件導向程式設計思想中軟體復用的功能。繼承的實質就是通過現有的類的特徵,構造乙個具有現有類特徵的新類,這個新類成為派生類。派生類是從乙個或者多個以前定義的類 基類 繼承資料和函式,同時增加或者重定義資料和函...

C 繼承與派生

派生新類 吸收已有類的成員 調整已有類成員和新增新的成員 class 派生類名 繼承方式 基類名1,繼承方式 基類名2,派生類成員宣告 繼承方式有 public protected private 預設 公有繼承 基類的公有和保護乘員的訪問屬性在派生類中不變,基類的私有成員不能直接訪問 型別相容規則...