虛函式與純虛函式的區別

2021-10-10 23:07:40 字數 1160 閱讀 6608

一、虛函式

1.定義:虛函式是乙個類的成員函式。

2.定義格式如下: virtual 返回型別 函式名(參數列)(關鍵字virtual指明該成員函式為虛函式。virtual僅用於類定義中,如虛函式在類外定義,不可加virtual)

3.當某乙個類的乙個類成員函式被定義為虛函式,則由該類派生出來的所有派生類中,該函式始終保持虛函式的特徵。

4.當在派生類中重新定義虛函式(overriding a virtual function,亦譯作超載或覆蓋)時,不必加關鍵字virtual。但重新定義時不僅要同名,而且它的參數列和返回型別全部與基類中的虛函式一樣,否則聯編時出錯。

5.如未加關鍵字virtual,則是普通的派生類中的新成員函式覆蓋基類同名成員函式(當然參數列必須一樣,否則是過載),可稱為同名覆蓋函式,它不能實現執行時的多型性。

注意:

1.  派生類中定義虛函式必須與基類中的虛函式同名外,還必須同參數列,同返回型別。否則被認為是過載,而不是虛函式。如基類中返回基類指標,派生類中返回派生類指標是允許的,這是乙個例外。

2.  只有類的成員函式才能說明為虛函式。這是因為虛函式僅適用於有繼承關係的類物件。

3.  靜態成員函式,是所有同一類物件共有,不受限於某個物件,不能作為虛函式。

4.  乙個類物件的靜態和動態型別是相同的,實現動態多型性時,必須使用基類型別的指標變數或引用,使該指標指向該基類的不同派生類的物件,並通過該指標指向虛函式,才能實現動態的多型性。

二、純虛函式

1.定義:純虛函式(pure virtual function)是指被標明為不具體實現的虛擬成員函式。

2.定義純虛函式的一般格式為: virtual 返回型別 函式名(參數列)=0;

3.它用於這樣的情況:定義乙個基類時,會遇到無法定義基類中虛函式的具體實現,其實現依賴於不同的派生類。

含有純虛函式的基類是不能用來定義物件的。純虛函式沒有實現部分,不能產生物件,所以含有純虛函式的類是抽象類。

注意:1  定義純虛函式時,不能定義虛函式的實現部分。即使是函式體為空也不可以,函式體為空就可以執行,只是什麼也不做就返回。而純虛函式不能呼叫。

2     「=0」表明程式設計師將不定義該函式,函式宣告是為派生類保留乙個位置。「=0」本質上是將指向函式體的指標定為null。

3     在派生類中必須有重新定義的純虛函式的函式體,這樣的派生類才能用來定義物件。

虛函式 與 純虛函式 區別

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

虛函式與純虛函式的區別

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

虛函式,純虛函式區別

1 虛函式的作用是 執行時多型 和過載,父類中提供虛函式的實現,為子類提供預設的函式實現 子類可以重寫父類的虛函式實現子類的特殊化 2 純虛函式 包含純虛函式的類稱為抽象類。抽象類不可以new出物件,只有實現了這個純虛函式的子類才能new出物件。純虛函式更像是只提供申明,不實現,是對子類的約束,是介...