c 純虛函式和抽象基類

2021-10-12 04:21:08 字數 898 閱讀 8110

c++物件導向程式設計的思想之一是可以使用繼承。繼承中乙個重要的思想是使用抽象基類(abstract base class,abc)。

假設我們開發乙個程式,需要使用橢圓和圓兩種圖形。因為圓是橢圓的一種特殊情形,根據繼承『is-a』的思想,自然會想到先定義乙個eclipse類,再將circle類繼承自eclipse類。

但這樣實現有不好的地方。

橢圓中,需要表示長半軸和短半軸、angle(長軸和水平線的夾角),還可以有rotate方法將橢圓進行旋轉,這些都是圓所不需要的,將圓繼承自橢圓,是十分笨拙的。

一種更好的辦法是,使用抽象基類(abc),將橢圓和圓的共性部分,例如座標x、y,共同的方法例如移動move、計算面積area抽象出來放到乙個基類shape中,再將eclipse和circle類分別繼承shape,這樣就可以使用基類指標陣列同時管理eclipse和circle物件。

當類宣告中包含純虛函式時,不能建立該類的物件,此類稱為抽象基類。

純虛函式的宣告如下(以area為例):

virtual

double

area()

const=0

;

abc類shape的定義如下:

class

shape

//建構函式

virtual

~shape()

//析構函式

void

move

(int nx,ny)

//move函式

virtual

double

area()

const=0

;//純虛函式

}

此後,就可以從shape類派生出eclipse類和circle類,在各自的派生類中加入需要的屬性

C 抽象基類和純虛函式

為什麼c 要定義抽象基類?c 為什麼要定義抽象基類?抽象類就是類裡定義了純虛成員函式的類。純虛函式只提供了介面,並沒有具體實現。抽象類不能被例項化,通常是作為基類供子類繼承,子類中重寫虛函式,實現具體的介面。為什麼要定義抽象基類呢?依我所見主要有以下原因 1.最重要的原因是,可以將介面與實現分離。介...

純虛函式和抽象基類

純虛函式的格式 virtual 型別 函式名 參數列 0 而我們的純虛函式經常被用來構建抽象基類。抽象基類 當我們僅想對基類進行向上型別轉換,使用它的介面,而不希望使用者實際地建立乙個基類的物件,那麼我們就在基類中加入至少乙個純虛函式 pure virtual function 來使基類稱為抽象 a...

純虛函式和抽象基類

純虛函式就是基類只定義了函式體,沒有具體的實現過程,必須在子類中加以實現。如果基類中含有乙個或多個純虛函式,那麼它就屬於抽象基類,不能被例項化。1 引入抽象基類和純虛函式的原因有以下兩點 1 為了方便的是使用多型特性 2 在很多情況下,基類本身生成物件是不合情理的。抽象基類不能夠被例項化,它定義的純...