/** * 抽象形狀類
*/class
abstractshape
;#endif
//share_abstractshape_h
abstractshape.cpp
//
// created by oceanstar on 2020/8/3.
//#include
"abstractshape.h"
abstractshape::
abstractshape
(int edge)
int abstractshape::
getedge()
rectangle.h
//
// created by oceanstar on 2020/8/3.
//#ifndef share_rectangle_h
#define share_rectangle_h
#include
"abstractshape.h"
/** * 矩形類,繼承自形狀類
*/class
rectangle
:public abstractshape
;#endif
//share_rectangle_h
rectangle.cpp
//
// created by oceanstar on 2020/8/3.
//#include
#include
"rectangle.h"
rectangle::
rectangle
(int bottom,
int height)
:abstractshape(4
)int rectangle::
calcarea()
void rectangle::
uniquefunc()
********.h
//
// created by oceanstar on 2020/8/3.
//#include
"abstractshape.h"
#ifndef share_********_h
#define share_********_h
class
********
:public abstractshape
;#endif
//share_********_h
********.cpp
//
// created by oceanstar on 2020/8/3.
//#include
"********.h"
********::
********
(int bottom,
int height)
:abstractshape(3
)int ********::
calcarea()
main中使用:
******** ******** =
********(4
,5);
cout << ********.
getedge()
<<
",\t"
; cout << ********.
calcarea()
<< endl;
rectangle rectangle =
rectangle(4
,5);
cout << rectangle.
getedge()
<<
",\t"
; cout << rectangle.
calcarea()
<< endl;
rectangle.
uniquefunc()
;
//---------------上轉---------------------
abstractshape *pshape =
null
;//定義了乙個抽象類的指標,注意抽象類不能定義物件但是可以定義指標
pshape =
new********(4
,5);
//基類指標指向派生類的物件
cout << pshape-
>
getedge()
<<
",\t"
; cout << pshape-
>
calcarea()
<< endl;
delete pshape;
//釋放了ccirle物件所佔的記憶體,但是指標是沒有消失的,它現在就是乙個野指標,我們在使用之前必須對它賦值
pshape =
&rectangle;
//基類指標指向派生類的物件
cout << pshape-
>
getedge()
<<
",\t"
; cout << pshape-
>
calcarea()
<< endl;
// 可以看到,我們使用父類的指標呼叫同乙個函式,分別呼叫了這兩個派生類的對應函式,它根據指標指向的型別的不同來決定呼叫的方法。即使我們以後需要新增加幾個類,我們還是這種呼叫方法,這就是多型的巨大魅力。
//---------------上轉---------------------
abstractshape *pshape =
null
;//定義了乙個抽象類的指標,注意抽象類不能定義物件但是可以定義指標
rectangle *rectangle_bynew =
newrectangle(4
,5);
cout << rectangle_bynew-
>
getedge()
<<
",\t"
; cout << rectangle_bynew-
>
calcarea()
<< endl;
rectangle_bynew-
>
uniquefunc()
; pshape = rectangle_bynew;
cout << pshape-
>
getedge()
<<
",\t"
; cout << pshape-
>
calcarea()
<< endl;
delete rectangle_bynew;
abstractshape *pshape_1 =
newrectangle(4
,5);
rectangle *rectangle_cast =
dynamic_cast
>
(pshape_1);if
(rectangle_cast !=
nullptr
)
等待: C C 抽象類及其方法
一 解釋1 在c 中使用關鍵字 abstract 來定義抽象類和抽象方法。不能初始化的類被叫做抽象類,它們只提供部分實現,但是另乙個類可以繼承它並且能建立它們 的例項。乙個包含乙個或多個純虛函式的類叫抽象類,抽象類不能被例項化,進一步 乙個抽象類只能通過介面和作為其它類的基類使用.c program...
C 基礎 抽象類
下面,我們舉乙個完整的例子 例11 22 include class cpolygon virtual int area void 0 class crectangle public cpolygon class c public cpolygon int main 本程式計算本輸出矩形和三角形的面...
Java基礎 抽象類
抽象類 目前存在的問題 1.動物類的run方法描述的不正確。2.沒有強制要子類一定要重寫run方法 抽象類的應用場景 我們在描述一類事物的時候,發現這種事物確實存在某種行為,但是這種行為目前是不具體的,那麼我們可以抽取這種行為的宣告,但是不去實現這種行為,這種時候這種行為我們稱作為抽象行為,我們就需...