一、純虛函式
虛函式是多型是實現多型的前提,如果我們需要在基類中定義共同的結構,那麼介面就需要定義成虛函式。但是很多情況下基類的介面是無法實現的,比如形狀類shape,定義乙個draw方法。很明顯這個方法沒法實現,因為我們可以畫出圓,正方形,但是不能畫出"形狀"。此時我們可以將這些介面定義成虛函式。
在基類中不能給出有意義的虛函式定義,這時可以把它說明成純虛函式,把它的定義留給派生類來做,如果派生類沒有實現,那麼派生類也是純虛函式,
純虛函式不需要實現
純虛函式定義:
class 類名;
二、簡單工廠模式
工廠方法模式(factory method pattern
)是一種實現了「工廠」概念的物件導向設計模式。就像其他建立型模式一樣,它也是處理在不指定物件具體型別的情況下建立物件的問題。工廠方法模式的實質是「定義乙個建立物件的介面,但讓實現這個介面的類來決定例項化哪個類。工廠方法讓類的例項化推遲到子類中進行。
純虛函式和簡單工廠模式示例:
二、抽象類
包含純虛函式的類我們稱作抽象類。
作用:抽象類為抽象和設計的目的而宣告,將有關的資料和行為組織在乙個繼承層次結構中,保證派生類具有要求的行為。
對於暫時無法實現的函式,可以宣告為純虛函式,留給派生類去實現。
注意:
簡單工廠模式和抽象類示例:
#include #include #include using namespace std;
class shape
};class circle : public shape
}void deleteallshapes(const vector& v)
}// 簡單工廠模式
class shapefactory
else if (name == "square")
else if (name == "rectangle")
return ps;
}};int main(void)
三、多型好處
1、多型性有助於更好地對程式進行抽象
2、多型性有助於提高程式的可擴充套件性
四、虛析構函式
前面我們講過析構函式可以宣告為虛函式,這樣我們
delete 基類指標的時候,就會釋放基類指標的指向的物件的記憶體。也就是說,
程式會根據基類指標指向的物件的型別確定要呼叫的析構函式。
如果基類的析構函式為虛函式,那麼所有派生類的析構函式都是虛函式。但是
建構函式不得是虛函式,這個在前面也已經講過。
最後析構函式還可以是純虛的,它的使用場景是:對於乙個沒有任何介面的類,如果想要將它定義成抽象類,只能將虛析構函式宣告為純虛的,通常情況下在基類中純虛函式不需要實現,但是純虛析構函式要給出實現。(給出乙個空的實現即可)
示例:
#include using namespace std;
class base
};class drived : public base
;int main(void)
多型,虛函式,純虛函式,抽象類
c 中,實現多型有以下方法 虛函式,抽象類,過載,覆蓋 多型性在object pascal和c 中都是通過虛函式 virtual function 實現的。這麼一大堆名詞,實際上就圍繞一件事展開,就是多型,其他三個名詞都是為實現c 的多型機制而提出的一些規則,下面分兩部分介紹,第一部分介紹 多型 第...
多型 3 純虛函式和抽象類
2 純虛函式的語法 3 示例 純虛函式是乙個在基類中說明的虛函式,在基類中沒有定義,要求任何派生類都定義自己的版本。虛函式為個派生類提供乙個公共介面 介面的封裝和設計 軟體的模組功能劃分 乙個具有純虛函式的基類稱為抽象類,抽象類不能例項化。抽象類的子類必須要重寫父類中的純虛函式,否則也屬於抽象類。v...
抽象類 純虛函式
在程式中,有些時候我們的基類是不需要例項化的,比如有乙個基類哺乳動物,這個在程式實現的時候沒有必要把他例項化出來。而只是乙個種群的抽象描述,也 無法進行例項化。所以在c 我們可以建立一種叫做抽象資料型別的類。這個類 只是用來繼承的,單獨沒有例項化,沒有意義。其實這也是減少了程式設計師編寫 後除錯的除...