C 之虛函式(一)純虛函式詳解

2021-07-27 03:46:58 字數 1027 閱讀 9757

有時在基類中將某一成員函式定為虛函式,並不是基類本身的要求,而是考慮到派生類的需要,在基類中預留了乙個函式名,具體功能留給派生類根據需要去定義。

例如在前邊的例12.1(詳情請檢視:

什麼是c++虛函式

)程式中,基類point中沒有求面積的area函式,因為「點」是沒有面積的,也就是說,基類本身不需要這個函式,所以在例12.1程式中的point類中沒有定義area函式。

但是,在其直接派生類circle和間接派生類cylinder中都需要有area函式,而且這兩個area函式的功能不同,乙個是求圓面積,乙個是求圓柱體表面積。

有的讀者自然會想到,在這種情況下應當將area宣告為虛函式。可以在基類point中加乙個area函式,並宣告為虛函式:

virtual float area( )const

其返回值為0,表示「點」是沒有面積的。

其實,在基類中並不使用這個函式,其返回值也是沒有意義的。為簡化,可以不寫出這種無意義的函式體,只給出函式的原型,並在後面加上「=0」,如:

virtual float area( )const =0;  //純虛函式

這就將area宣告為乙個純虛函式(pure virtual function)。

純虛函式是在宣告虛函式時被「初始化」為0的函式。宣告純虛函式的一般形式是

virtual 函式型別 函式名 (參數列列) = 0;

關於純虛函式需要注意的幾點:

純虛函式沒有函式體;

最後面的「=0」並不表示函式返回值為0,它只起形式上的作用,告訴編譯系統「這是純虛函式」;

這是乙個宣告語句,最後應有分號。

純虛函式只有函式的名字而不具備函式的功能,不能被呼叫。它只是通知編譯系統:「在這裡宣告乙個虛函式,留待派生類中定義」。在派生類中對此函式提供定義後,它才能具備函式的功能,可被呼叫。

純虛函式的作用是在基類中為其派生類保留乙個函式的名字,以便派生類根據需要對它進行定義。

如果在基類中沒有保留函式名字,則無法實現多型性。如果在乙個類中宣告了純虛函式,而在其派生類中沒有對該函式定義,則該虛函式在派生類中仍然為純虛函式

虛函式 純虛函式詳解

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

虛函式 純虛函式詳解

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

虛函式 純虛函式詳解

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