1)
抽象基類通常用於表示目標問題領域的抽象概念,建立這種型別的物件時沒有任何意義的。我們通過至少宣告乙個純虛函式(或從別的類繼承乙個純虛函式並且不予實現)使得乙個基類成為抽象的,編譯器將會確保沒人能夠建立該抽象基類的任何物件:
class
aceclass;2)
有時找不到可以設計成為純虛函式的候選者,但仍然希望類的行為像個抽象基類。這時可以通過確保類中不存在公有建構函式以及公有複製建構函式來模擬抽象基類的性質,由於如果我們不顯示宣告乙個建構函式和複製建構函式時,編譯器也會宣告乙個隱式的建構函式和隱式的複製建構函式,因此,我們必須顯式地宣告這兩個建構函式:
class
aceclass;3)
另一種使乙個類成為抽象基類的方式需要人為地將該類的乙個虛函式指定為純虛的。通常利用析構函式:
class
aceclass
;//...........
aceclass::~aceclass()
在上面**中,為該純虛函式提供乙個實現是必不可少的,因為派生類的析構函式將會隱式地呼叫其基類的析構函式,而從乙個派生類析構函式內部對乙個基類析構函式的隱式呼叫要求是非虛擬的。 4)
當乙個類沒有任何虛函式並且不需要顯式宣告建構函式時,可以採用受保護的、非虛擬的析構函式:
class
aceclass
;受保護的析構函式和受保護的建構函式發揮的效果基本相同,不過前者報錯發生在物件離開作用域時或被顯式銷毀時,而非物件建立時。
C 抽象基類
為什麼c 要定義抽象基類?c 為什麼要定義抽象基類?抽象類就是類裡定義了純虛成員函式的類。純虛函式只提供了介面,並沒有具體實現。抽象類不能被例項化,通常是作為基類供子類繼承,子類中重寫虛函式,實現具體的介面。為什麼要定義抽象基類呢?依我所見主要有以下原因 1.最重要的原因是,可以將介面與實現分離。介...
Java語言之抽象類
package 抽象類 1.如何定義抽象類?class 關鍵字前加abstract 2.抽象類無法被例項化 3.雖然抽象類沒有辦法例項化,但是抽象類也有構造方法,該構造方法是給子類建立物件用的。4.抽象類中的可以定義抽象的方法。抽象方法的語法 在方法的修飾符列表中新增abstract關鍵字,並且抽象...
C 學習 抽象基類
抽象基類 abstract base class abc c 提供純虛函式提供未實現的方法,純虛函式宣告的結尾處為 0,例如 class baseellipse virtual baseelipse void move int nx int ny virtual double area const ...