C 虛函式和純虛函式和抽象類

2021-07-22 06:49:14 字數 783 閱讀 4360

虛函式是類的一種特殊成員函式,主要是為實現c++的多型特性引入。

虛函式之所以「虛」是因為呼叫的虛函式不是在靜態編譯(靜態編聯)時確定,而是在執行時通過動態編聯確定的。

多型核心理念即是通過基類訪問派生的子類,通常情況是借助基類指標來訪問派生類物件。

note:

1)析構函式通常宣告為虛函式,這樣在有繼承場合,可以做到基於物件型別動態呼叫正確物件型別的析構函式,完成相應的物件析構。

2)友元函式不是成員函式,只有成員函式才能是虛函式,所以友元函式不能是虛函式;但是友元函式可以通過呼叫成員虛函式達到虛擬化效果。

3)通過虛函式可以實現多型靈活,但是虛函式也有缺點如占用更多記憶體(虛表),執行效率低(需要查詢虛表找到正確函式)。

4)通常普通函式(非成員函式)和類中不能繼承(只屬於本類)的函式(建構函式/static成員函式/inline成員函式/友元函式)不能宣告為虛函式;不能宣告為虛函式的函式共同點基本都是靜態編聯,而虛函式要靠動態編聯機制才能起作用。

純虛函式是一種特殊的虛函式,通常定義在基類中。純虛函式在基類中定義方法是在函式宣告末尾加「=0」,如 virtual func(int, int) = 0。

純虛函式的「純」體現為基類不需要實現它,其主要作用是為派生類定義函式介面框架,由派生類完成純虛函式的實現。

如果乙個類包含有純虛函式,則該類稱為抽象類。

抽象類一般只能是基類,其宣告的純虛函式由派生類實現。如果派生類沒有重寫(覆蓋)抽象類的純虛函式則派生類也是抽象類。

物件不能基於抽象類建立,必須基於派生出來的具體類建立物件。

虛基類 虛函式 純虛函式和抽象類

一 虛基類 在 多繼承 中講過的例子中,由類a,類b1和類b2以及類c組成了類繼承的層次結構。在該結構中,類c的物件將包含兩個類a的子物件。由於類a是派生類c兩條繼承路徑上的乙個公共基類,那麼這個公共基類將在派生類的物件中產生多個基類子物件。如果要想使這個公共基類在派生類中只產生乙個基類子物件,則必...

C C 虛函式 純虛函式和抽象類

定義乙個函式為虛函式,不代表函式為不被實現的函式,定義這個函式為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義純虛函式是為了實現乙個介面,起到乙個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。我們直接看下面的 classa classb...

6 虛函式 純虛函式和抽象類

首先 強調乙個概念 1 簡介 假設我們有下面的類層次 classa classb public a intmain void 一 定義 純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加 0 virtual void...