純虛函式與基類指標陣列的應用

2021-08-19 22:39:00 字數 1715 閱讀 1104

題目內容:

定義抽象基類shape, 其中純虛函式printname()輸出幾何圖形的名稱和相應的成員資料、純虛函式printarea()計算幾何圖形的面積。並由shape類派生出5個派生類:circle(圓形),資料成員為半徑、square(正方形) ,資料成員為邊長、rectangle(長方形) ,資料成員為長和寬、trapezoid(梯形) ,資料成員為上底、下底和高、********(三角形) ,資料成員為底和高。測試過程,定義乙個指向基類的指標陣列,使其每個元素指向乙個動態產生的派生類物件,分別呼叫相應的成員函式顯示各個幾何圖形的屬性及面積,最終輸出總面積值。

輸入格式:

依次輸入圓半徑、正方形邊長、長方形長寬、梯形上底下底和高、三角形底邊和高

輸出格式:

請參考輸出樣例,建議直接複製樣例中的部分文字貼上進自己的**。圓周率取 3.14159

注意輸出中的標點符號、空格。

輸入樣例:105

2 41 2 3

4 3輸出樣例:

圓:半徑=10,面積:314.159

正方形:邊長=5,面積:25

長方形:長=2,寬=4,面積:8

梯形:上底=1,下底=2,高=3,面積:4.5

三角形:底邊=4,高=3,面積:6

總面積:357.659

#includeusing namespace std;

#define pi 3.14159

class shape

;class circle:public shape

virtual void printname()

virtual void printname()

virtual void printname()

virtual void printname()

virtual void printname()

{ cout<<"三角形:"<<"底邊="<>a1;

cin>>b1;

cin>>c1>>c2;

cin>>d1>>d2>>d3;

cin>>e1>>e2;

shape *s[5];

circle circle1(a1);

square square1(b1);

rectangle rele1(c1,c2);

trapezoid td1(d1,d2,d3);

******** tre1(e1,e2);

s[0]=&circle1;

s[1]=&square1;

s[2]=&rele1;

s[3]=&td1;

s[4]=&tre1;

s[0]->printname();

cout<<"面積:"cout<<"面積:"cout<<"面積:"cout<<"面積:"cout<<"面積:"printarea()+s[2]->printarea()+s[3]->printarea()+s[4]->printarea()<

輸出樣例:

圓:半徑=10,面積:314.159

正方形:邊長=5,面積:25

長方形:長=2,寬=4,面積:8

梯形:上底=1,下底=2,高=3,面積:4.5

三角形:底邊=4,高=3,面積:6

總面積:357.659

純虛函式與基類指標陣列的應用

使用虛函式是實現動態聯編的基礎。正確使用虛函式,需要滿足下列條件 1 具有符合型別相容規則的公有派生類層次結構。2 在派生類中重新定義基類的虛函式,對其進行覆蓋。3 通過基類指標或基類引用訪問虛函式。1 題目內容 定義抽象基類shape,其中純虛函式printname 輸出幾何圖形的名稱和相應的成員...

虛基類 虛函式和純虛基類

首先看乙個例子 class base class child1 public base class child2 public base void main else p print 函式呼叫的時候,檢視虛表,根據p的位址首先從虛表裡面查詢要呼叫的函式 這裡呼叫child2的print 函式 ret...

C 虛基類 虛函式與純虛函式

虛基類 在說明其作用前先看一段 classa class b publica classc publica classd public b publicc void main 從 中可以看出類b c都繼承了類a的ivalue成員,因此類b c都有乙個成員變數ivalue 而類d又繼承了b c,這樣類...