C 程式設計入門 抽象類

2021-09-29 02:45:45 字數 3365 閱讀 1131

題目:程式設計定義抽象類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...