虛函式和純虛函式的用法和區別

2021-10-08 14:44:19 字數 1401 閱讀 7712

學習c++的多型,必然聽說過虛函式和純虛函式。

要學習虛函式和純虛函式,首先我們要搞清楚它的語法規範。總結一下無非下面幾點:

虛函式和純虛函式出現的意義何在呢,我們用乙個例子來說明它們是如何實現多型的:

假設我們設計乙個飲品做法的類,並提供類似沖泡材料,沖泡時間的實現**,而飲品的樣式也是多種多樣,有茶水,咖啡,奶茶等等。然後我們假設有乙個飲品製造者,他可以做很多樣式的飲品。

首先我們假設所有的飲品做法都有沖泡的水,沖泡材料,沖泡時間。我們將這三種行為抽象到乙個抽象類中,並由它來派生具體的飲品。

class

abstractdrinking

};

由此我們有了abstractdrinking這個基類,當中有沖泡的水,沖泡材料,沖泡時間三個行為和乙個執行流程函式,其中沖泡的水是虛函式,而另外兩個是純虛函式。

water()是乙個普通虛函式,基類希望子類提供自己的個性化實現**,但基類同時也提供乙個預設的虛函式實現版本,在子類不複寫該虛函式的情況下作為備選方案

void abstractdrinking::

water()

然後根據這個abstractdrinking基類,我們可以派生出其他各種各樣的飲料派生類。

茶類定義

class

tea:

public abstractdrinking

virtual

void

time()

virtual

void

ingredients()

};

咖啡類定義

class

coffee

:public abstractdrinking

virtual

void

ingredients()

};

以上**可以看到,咖啡類沒有複寫water而是使用基類提供的water。

然後我們來定義乙個優秀的飲品製造者。

class

drinkingmaker

};

然後再在主函式當中實現:

int

main()

總結一下:

當基類的某個成員方法,在大多數情形下由子類提供個性化實現,但基類也可以提供乙個備選方案的時候,將其設計為虛函式。

當基類的某個成員方法,必須由子類提供個性化實現的時候,將其設計為純虛函式。

純虛函式在基類中的實現跟多型性無關,它只是提供了一種語法上的便利,在變化多端的應用場景中留有後路。

虛函式和純虛函式的區別

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

虛函式和純虛函式的區別

a.編譯時 多型性 通過 過載函式實現 b執行時 多型性 通過虛函式實現。首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義純虛函式是為了實現乙個介面,起到乙個規範的作用,...

虛函式和純虛函式的區別

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