下面,我們舉乙個完整的例子:
例11-22
#include
class cpolygon
virtual int area (void) =0;
}; class crectangle: public cpolygon
}; class c********: public cpolygon
}; int main ()
本程式計算本輸出矩形和三角形的面積,執行結果為:
2010
上面的**中,我們用基類cpolygon指標指向派生類crectangle和c********物件,呼叫派生類的area成員函式,而在main函式中輸出area函式的計算結果。我們也可以在cpolygon類中定義乙個成員函式,用於列印計算結果,而不管是哪乙個派生類的area函式的計算結果。cpolygon類修改如下:
class cpolygon
上面我們已經看到:基類vehicle包含有自己的、具體的message虛函式的實現。在c++中,也可以在基類中僅定義虛函式的訊號:函式的名字、返回型別和引數,而沒有實現,但在派生類中必須有該虛函式實現。
僅定義了函式的訊號,而沒有函式實現的虛函式稱之為純虛函式。定義純虛函式的方法是在虛函式引數表右邊的括號後加乙個"=0"的字尾,例如:
class vehicle
;上面這段**中,我們便把vehicle的message成員函式定義為純虛函式。含有純虛函式的類,我們稱之為抽象類,_______。所以,抽象類也稱之為抽象的基類。
下面,我們再看乙個抽象類的例子:
class cpolygon
virtual int area (void) =0;
}; cpolygon類的成員函式area被定義為純虛函式,它返回int變數,沒有引數。因為cpolygon類包含了純虛函式area,所以,它是乙個抽象類,下面的定義:
cpolygon poly;
是錯誤的。我們雖然不能定義抽象類物件,但可以定義抽象類指標,例如:
cpolygon * ppoly1;
cpolygon * ppoly2
是完全正確的,這是因為基類的指標可以指向派生類的物件。
C 基礎 042 抽象類 抽象方法
虛擬成員或者抽象成員不能是私有的 抽象方法是用abstract修飾的方法 抽象方法是不能含有方法體的 抽象方法可以是public 和protected 抽象類中可以寫抽象方法 抽象方法必須在抽象類中 抽象類中可以寫例項方法 抽象類是乙個不完全抽象的類 抽象類是無法進行例項化的 這是乙個父類,由abs...
C 抽象類的基礎原理
在 物件導向 的概念中,所有的物件都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪物件的,如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。抽象類往往用來表徵對問題領域進行分析 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。抽象類不能直接...
Java基礎 抽象類
抽象類 目前存在的問題 1.動物類的run方法描述的不正確。2.沒有強制要子類一定要重寫run方法 抽象類的應用場景 我們在描述一類事物的時候,發現這種事物確實存在某種行為,但是這種行為目前是不具體的,那麼我們可以抽取這種行為的宣告,但是不去實現這種行為,這種時候這種行為我們稱作為抽象行為,我們就需...