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

2022-04-18 15:21:34 字數 2225 閱讀 3812

§

寫在前面的

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

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

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

?classshape

;

voiddraw()

};

classrectangle :publicshape

;

voiddraw()

};

classround :publicshape

;

voiddraw()

};

voidmain()

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

?classshape

;

virtualvoiddraw()//注意這裡設定為虛函式

};

classrectangle :publicshape

;

voiddraw()

};

classround :publicshape

;

voiddraw()

};

voidmain()

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

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

?voidmain()

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

字(虛函式)的存在呢?

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

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

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

c 虛函式和純虛函式

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

C 虛函式和純虛函式

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