三十 純虛函式 抽象類 多型 簡單工廠模式

2021-06-28 06:27:06 字數 1555 閱讀 5702

一、純虛函式

虛函式是多型是實現多型的前提,如果我們需要在基類中定義共同的結構,那麼介面就需要定義成虛函式。但是很多情況下基類的介面是無法實現的,比如形狀類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 我們可以建立一種叫做抽象資料型別的類。這個類 只是用來繼承的,單獨沒有例項化,沒有意義。其實這也是減少了程式設計師編寫 後除錯的除...