虛函式 純虛函式詳解

2021-06-22 08:56:24 字數 2081 閱讀 1199

虛函式:父類中有虛函式,如果子類例項以父類的身份出現,那麼呼叫虛函式的時候就會是子類的實現,而不是父類的實現,如果是普通方法,那麼將會呼叫父類的實現

1.首先:強調乙個概念 

定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。

定義乙個函式為純虛函式,才代表函式沒有被實現。定義他是為了實現乙個介面,起到乙個規範的作用,規範繼承這個。類的程式設計師必須實現這個函式。 

2.關於例項化乙個類: 

有純虛函式的類是不可能生成類物件的,如果沒有純虛函式則可以。比如: 

cpp**

class ca    

;    

class cb    

;    

// ca,cb類的實現 

...    

void main()    

class ca ; class cb ; // ca,cb類的實現 ... void main()  

3.虛函式在多型中間的使用: 

多型一般就是通過指向基類的指標來實現的。 

4.有一點你必須明白,就是用父類的指標在執行時刻來呼叫子類: 

例如,有個函式是這樣的: 

cpp**

void animal::fun1(animal *maybedog_maybehorse)    

void animal::fun1(animal *maybedog_maybehorse)  

引數maybedog_maybehorse在編譯時刻並不知道傳進來的是dog類還是horse類,所以就把它設定為animal類,具體到執行時決定了才決定用那個函式。也就是說用父類指標通過虛函式來決定執行時刻到底是誰而指向誰的函式。

5.用虛函式

cpp**

#include 

class animal    

;    

void animal::fun1(animal *maybedog_maybehorse)    

animal::animal()     

animal::~animal()     

void animal::born()    

///horse

class horse:public animal    

;    

horse::horse()     

horse::~horse()     

void horse::born()   

///main

void main()    

//output: horse

#include class animal ; void animal::fun1(animal *maybedog_maybehorse) animal::animal() animal::~animal() void animal::born() ///horse class horse:public animal ; horse::horse() horse::~horse() void horse::born() ///main void main() //output: horse 

6.不用虛函式

cpp**

#include 

class animal    

;    

void animal::fun1(animal *maybedog_maybehorse)    

animal::animal()    

animal::~animal()     

void animal::born()    

horse

class horse:public animal    

;    

horse::horse()     

horse::~horse()     

void horse::born()   

main

void main()    

//output: animal

0

給主人留下些什麼吧!~~

虛函式 純虛函式詳解

1.首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義他是為了實現乙個介面,起到乙個規範的作用,規範繼承這個。類的程式設計師必須實現這個函式。2.關於例項化乙個類 有純虛函...

虛函式 純虛函式詳解

1.首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義他是為了實現乙個介面,起到乙個規範的作用,規範繼承這個。類的程式設計師必須實現這個函式。2.關於例項化乙個類 有純虛函...

虛函式 純虛函式詳解

1.首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義他是為了實現乙個介面,起到乙個規範的作用,規範繼承這個。類的程式設計師必須實現這個函式。2.關於例項化乙個類 有純虛函...