C 虛函式與純虛函式

2021-08-28 13:42:12 字數 1252 閱讀 6220

參考《c/c++程式設計師面試寶典》

虛函式的主要作用是建立抽象模型,從而可以達到方便擴充套件系統的目的。

純虛函式是指被標明為不具體實現的虛函式,是一種特殊的虛函式。

虛函式必須是基類的非靜態成員函式,其訪問許可權可以是protected或public,在基類的類定義中定義虛函式的形式為:

virtual 函式返回值型別 虛函式名 (形參表)

虛函式擴充套件了派生類物件中隱藏基類函式的概念,當程式處於相似家族的異構物件集合時,要使用到這些函式。

純虛函式是一種特殊的虛函式,它的一般格式如下:

class 《類名》

在很多情況下,基類中不能對虛函式給出有意義的實現,而把它們說明為純虛函式,它的實現留給該基類的派生類去做。這就是純虛函式的作用。

虛函式與純虛函式的區別在於:純虛函式是虛函式的乙個子集,用於抽象類,含有純虛函式的類就是抽象類,它不能生成物件。

為了方便實用多型,程式設計者常常需要在基類中定義虛函式。在很多情況下,積累本身生成物件是不合情理的。例如,動物作為乙個基類可以派生出猴子、犀牛等子類,但動物本身生成物件明顯不合理。

為了解決上述問題,引入了純虛函式的概念,將函式定義為純虛函式,則編譯器要求在派生類中必須予以過載以實現多型性。同時含有純虛函式的類稱為抽象類,不能生成物件。這樣就很好的解決了上述兩個問題。乙個純虛函式使用的示例**如下

class a

//定義基類

class b: public a //定義子類

int main(int argc, char* argv) //主函式

在上面**中,f1()是乙個普通的過載。呼叫m_j->f1();回去呼叫a類中的f1,它是在程式設計者寫好**的時候就定好的。也就是根據它是由a類定義的,這樣就呼叫這個類的函式。f2()是虛函式。呼叫m_j->f2();會呼叫m_j到儲存的物件中,對應的這個函式,這是由於new的b物件。f3()與f2()一樣,只是在基類中不需要寫函式實現。

純虛函式用來定義沒有意義的實現,用於抽象類中需要交給派生類具體實現的方法。

C 虛函式與純虛函式

純虛函式定義如下 virtual functionname parameter 0 類的乙個成員定位虛函式的實際意義在於讓c 知道該函式並無意義,它的作用只是為了讓派生類進行函式過載保留位置。純虛函式的定義方法就是在類的虛函式後面加上 0 標記,類中一旦出現了純虛函式的定義,那麼此類為抽象類。例項 ...

C 虛函式與純虛函式

今天講講c 中,虛函式與純虛函式的用法和區別。而純虛函式是一種特殊的函式,它的作用是在基類中不給出有意義的實現,而把說明成純虛函式,它的實現留給該基類的派生類去做。包含純虛函式的類就是抽象類,抽象類不能被例項化,但是可以定義指向抽象類資料的指標變數,當派生類稱為具體類後,就可以用這種指標指向派生類的...

C 虛函式與純虛函式

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