C 虛函式和純虛函式(1)

2021-09-07 23:40:04 字數 1459 閱讀 5653

學習過c++類的繼承與多型的時候,但是很多的童鞋回過頭來都忘記之中關於虛函式和純虛函式的細節,甚至將他們混淆。

虛函式是動態多型性的基礎,其呼叫的方式是動態聯編(又稱晚期聯編,簡單解釋為只有在程式執行時才決定呼叫基類的還是子類的,系統會根據基類指標所指向的物件來決定要呼叫的函式);

非虛函式與其相反,是靜態聯編(呼叫已經在編譯時期就決定了;在編譯時期,系統已經根據指標所屬的型別確定了要呼叫的函式)。

class

shape

;

void

draw()

};class rectangle : public

shape

;

void

draw()

};class round : public

shape

;

void

draw()

};void

main()

我主程式中的意思是要畫方形和畫圓形,可執行的結果都是畫圖形(叫你兩兒子出來,怎麼出來的都是你啊,扯淡麼),這很明顯不符合我們的要求和多型的要求。所以虛函式必須應運而生。

class

shape

;

virtual

void draw()    //

注意這裡設定為虛函式

};class rectangle : public

shape

;

void

draw()

};class round : public

shape

;

void

draw()

};void

main()

這就滿足我們了,乙個是畫方形,乙個是畫圓形。

發現:即使不在基類shape當中把draw設定為虛函式,我們只要直接在主函式當中直接宣告子類的物件,呼叫draw,這種情況下是符合多型的思想的,

void

main()

這就有疑問了,為什麼還需要virtual關鍵

字(虛函式)的存在呢?

上面的例子只是乙個兩個派生類,如果shape有成百上千個派生類,難道我們呼叫派生類的draw的時候都宣告乙個派生類的物件嗎?很明顯不可能,所以虛函式的情況下,我們只要宣告乙個shape的指標就好了。

如果需要了解 c++ 多型的實現機制, 請參看: c++ 多型實現機制

傳送門:

c++虛函式和純虛函式(2)

2011-12-08

C 虛函式和純虛函式(1)

寫在前面的 學習過c 類的繼承與多型的時候,但是很多的童鞋回過頭來都忘記之中關於虛函式和純虛函式的細節,甚至將他們混淆。虛函式是動態多型性的基礎,其呼叫的方式是動態聯編 又稱晚期聯編,簡單解釋為只有在程式執行時才決定呼叫基類的還是子類的,系統會根據基類指標所指向的物件來決定要呼叫的函式 非虛函式與其...

c 虛函式和純虛函式

虛函式 定義 在基類中用virtual宣告,不一定不被實現,可以用基類的指標來呼叫子類的對應函式,實現成員函式的動態過載。子類virtual可寫可不寫,編譯器自動加上。1.以下繼承後的print 相當於重寫,兩個類print 方法輸出結果不同 class a 2.加了vitual 定義為虛函式以後,...

C 虛函式和純虛函式

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