題目:程式設計定義抽象類shape,由它派生出5個派生類circle(圓形),square(正方形),rectangle(矩形),trapezoid(梯形),********(三角形)。用虛函式分別計算幾種圖形的面積,並求他們的和。要求:用基類指標陣列,使它每乙個元素指向乙個派生類物件。
首先,我們來通俗了解一下什麼是抽象類,
包含有純虛函式的類是抽象類什麼又是純虛函式,在之前的文章我們說過了虛函式,有時在基類中將某一成員函式宣告為虛函式,並不是類本身的要求,而是考慮到派生類的需要,在基類中可以只宣告乙個函式名,具體的功能留給派生類根據需要去實現。
在這這種虛函式只需要在基類中說明函式原型,用來定義繼承體系中的同意介面形式,然後在派生類的虛函式中重新定義具體實現**,這種基類中的虛函式就是純虛函式,其宣告形式為:
virtual 函式型別 函式名(參數列)=0;關於純虛函式,有以下幾點需要說明:
純虛函式沒有函式體;而抽象類呢:最後面的"=0"並不表示函式返回值為0,只是形式上的作用,告訴編譯系統這是乙個純虛函式。
這本質上是乙個宣告語句,所以最後有分號結束。
純虛函式只有函式名而不具備函式的功能,不能被呼叫,它只是通知編譯器合理宣告了乙個純虛函式,留待在派生類中實現。因此,只有在派生類中定義之後,它才能更具備函式的功能,可以被呼叫。
如果在乙個類中宣告了純虛函式,而在派生類中沒有對該函式定義,則該虛函式在派生類中仍然為純虛函式。
1、上面說包含有純虛函式的類為抽象類。由於抽象類常用做基類,通常稱為抽象基類。此時,我們再來看這道題,首先建立乙個抽象基類:2、抽象類的主要作用是,通過它為乙個類族(即其派生類等)建立乙個公共的介面,使它能更有效地發揮其多型特性。
3、抽象類只負責宣告這個介面,而介面的實現,即純虛函式的函式體,要由派生類自己定義。
4、抽象類派生出新的類之後,如果派生類給出其純虛函式的實現,這個派生類此時便可以定義自己的物件,從而不再是抽象類,否則,這個派生類仍然是乙個抽象類。
5、抽象類不能例項化,即不能定義乙個抽象類的物件,但是可以宣告其指標和引用,通過這個指標或引用,就可以指向訪問派生類物件。
class
shape
;
沒有別的要求,我們直接來進行派生它的五個子類,分別是:
//圓形派生類circle
class
circle
:public shape
double
area()
private
:double radius;
//圓半徑
};
//正方形派生類square
class
square
:public shape
double
area()
private
:double sradius;
//正方形邊長
};
//矩形派生類rectangle
class
rectangle
:public shape
double
area()
protected
:double sweight, shigh;
//矩形寬和高
};
//梯形派生類trapezoid
class
trapezoid
:public shape
//構造:梯形上底下底和高
double
area()
protected
:double swidth, lwidth, rhigh;
//梯形上下底和高
};
//三角形派生類********
class
********
:public shape
double
area()
protected
:double width, height;
};
加上主測試函式,完整**如下:
//程式設計定義抽象類shape,由它派生出5個派生類circle(圓形),square(正方形),rectangle(矩形),trapezoid(梯形),********(三角形)。
//用虛函式分別計算幾種圖形的面積,並求他們的和。要求:用基類指標陣列,使它每乙個元素指向乙個派生類物件。
#include
using
namespace std;
class
shape
;class
circle
:public shape
double
area()
private
:double radius;};
//正方形派生類square
class
square
:public shape
double
area()
private
:double sradius;};
//矩形派生類rectangle
class
rectangle
:public shape
//構造:矩形寬和高
double
area()
protected
:double sweight, shigh;};
//梯形派生類trapezoid
class
trapezoid
:public shape
//構造:梯形上底下底和高
double
area()
protected
:double swidth, lwidth, rhigh;};
//三角形派生類********
class
********
:public shape
double
area()
protected
:double width, height;};
intmain()
執行結果如下:
C 學習入門(三) 抽象類
2.實現的案例 3.異常處理 抽象類往往用來表徵對問題領域進行分析 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。在c 中,抽象類可以包含 抽象方法 抽象屬性 具體方法和具體屬性。訪問修飾符 abstract class 類名 抽象類的定義類似於普通類,只不過在訪問修飾...
C 入門10 5 抽象類與抽象方法宣告
抽象類與非抽象類 抽象類前有關鍵字abstract,沒有則為非抽象類 宣告格式 public abstract class fly 抽象類要加關鍵字 public abstract void flys 宣告抽象方法不能有方法體 抽象類不能例項化,必須通過整合由派生類實現其抽象方法,因此不能用new,...
java入門之抽象類
抽象類 抽象類的作用類似模板供設計者依據他的格式來修改並建立新類,他不能事例化物件,包含乙個或多個抽象方法 用abstract修飾的方法 同樣,包含抽象方法的類必須是抽象類.抽象類用abstract修飾.抽象類只能被繼承,且繼承他的子類必須將所有父類的抽象方法全部實現.抽象方法 抽象方法用abstr...