學習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 簡介 假設我們有下面的類層...