繼承與派生 虛函式和多型

2021-10-04 08:42:22 字數 2359 閱讀 4962

繼承和派生

class

csstudent

;void

setname

(const string &name)

//....};

class

cundergraduate

:pulic cstudent

;//覆蓋

bool

canbaoyan()

;};//派生類的寫法:類名:public 基類名

cstudent::printinfo()//呼叫基類的printinfo

2.類之間的關係

繼承關係和復合關係

繼承:」是「的關係

復合:「有」的關係

3.派生類覆蓋基類成員

4.類的保護成員

5.派生類的建構函式

在建立派生類的物件的時候,需要呼叫基類的建構函式:初始化派生類物件中基類繼承的成員。在執行乙個派生類的建構函式之前,總是先執行基類的建構函式。

派生類的析構函式被執行時,先執行派生類的析構函式,自動呼叫基類的析構函式。

6.public繼承的賦值相容規則

class

base

;class

derived

:public base

;base b;

derive d;

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

b=d;

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

base&br=d;

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

base*pb=&d;

在類的定義中,前面有virtual關鍵字的成員函式就是虛函式。

class base;

int base::get(){}

virtual關鍵字只用在類定義的函式宣告中,寫函式體時不用。

建構函式和靜態成員函式不能是虛函式

多型的表現形式一

通過基類指標呼叫基類和派生類的物件,那麼被呼叫的時派生類中的同名的虛函式時:

(1)若該指標指向乙個基類的物件,那麼被呼叫的是基類的虛函式;

(2)若該函式指向乙個派生類的物件,那麼被呼叫的是派生類的虛函式。

這種機制就叫做」多型「。

class

cbase};

class

cderived

:public cbase

};int

main()

多型的表現形式之二

派生類的物件可以賦值給基類引用

通過基類引用基類和派生類中同名的虛函式時:

(1)若該引用引用的是乙個基類的物件,那麼被呼叫的是基類的虛函式;

(2)若該引用引用的是乙個派生類的物件,那麼被呼叫的是派生類的虛函式。

這種機制也叫做多型。

class

cbase};

class

cderived

:public cbase

};int

main()

多型的作用:在物件導向的程式設計中使用多型,能夠增強程式的可擴充性,即程式需要修改或者增加功能的時候,需要改動和增加的**較少。

多型實現的關鍵----虛函式表

每乙個虛函式的類(或有虛函式的類的派生類)都有乙個虛函式表,該類的任何物件中都放著虛函式的指標。虛函式列出了該類的虛函式位址。多出來的4個位元組就是用來存放虛函式的位址的。

多型的函式呼叫語句被編譯成一系列所指向的(或基類引用所引用的)物件中存放的虛函式表的位址,在虛函式表中查詢虛函式位址,並呼叫虛函式的指令。
#include

using

namespace std;

class

aclassb:

public a};

intmain()

輸出結果:b::func

a::func

虛析構函式:通過基類的指標刪除派生類的物件時,通常情況下只呼叫基類的析構函式

但是刪除乙個派生類的物件時,應該先呼叫派生類的析構函式,然後呼叫基類的析構函式。

解決辦法:把基類的析構函式宣告為virtual

派生類的析構函式可以virtual不進行宣告

通過基類的指標刪除派生類物件時,首先呼叫派生類的析構函式,然後呼叫基類的析構函式。

一般來說,乙個類如果定義了虛函式,則因該將析構函式也定義成虛函式。或者,乙個類打算作為基類使用,也應該將析構函式定義成虛函式。

注意:不允許以虛函式作為建構函式

純虛函式:沒有函式體

抽象類:包含純虛函式的類

C 的繼承和派生(四)多型的實現和虛函式

本篇所要講解的是包含多型,由於是在繼承的基礎上實現的,所以就乾脆放在繼承和派生這一專題了 在介紹多型前,請看下面一段 class do oid speak class pi oid speak class catvoid speak void display dog p void display p...

C 虛函式和多型繼承

指標和引用是很好理解的,變數的引用相當於給變數取了個別名,在函式呼叫時,傳引用是會將引數列表的值改變的。include using namespace std int main 最終輸出的結果都是0x7ffdd9aff7b4,即為記憶體中儲存整型變數m的位址。對於虛函式,它是實現多型公有繼承的關鍵。...

繼承 虛函式和多型小結

一.知識點總結 繼承 1.定義 在已有類的基礎上建立新類的過程。乙個 b 類繼承 a類,或稱從類 a 派生類 b類 a 稱為基類 父類 類 b 稱為派生類 子類 2.類繼承關係的語法形式 class 派生類名 基類名錶 資料成員和成員函式宣告 基類名錶 構成訪問控制 基類名1,訪問控制 基類名 2 ...