虛函式與純虛函式

2021-08-15 16:40:45 字數 1116 閱讀 8372

參考《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()一樣,只是在基類中不需要寫函式實現。

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

虛函式與純虛函式

1 基本形式 virtual returntype function 1 虛函式宣告 virtual returntype function 2 0 純虛函式宣告 先講示例吧,再總結結論。2 示例 classanimail 這段 的輸出結果是什麼呢?起初我認為是 animail function 1...

虛函式與純虛函式

參考 虛函式 比如 virtual void function1 virtual關鍵字修飾的 成員函式 就是虛函式。把基類的成員函式 設為virtual,其 派生類的相應的函式也會自動變為虛函式。指向 基類的指標在操作它的 多型類物件時,會根據不同的類物件,呼叫其相應的函式,這個函式就是虛函式。純虛...

虛函式與純虛函式

1 基本形式 virtual returntype function 1 虛函式宣告 virtual returntype function 2 0 純虛函式宣告 先講示例吧,再總結結論。2 示例 classanimail 這段 的輸出結果是什麼呢?起初我認為是 animail function 1...