題目內容:
定義抽象基類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,這樣類...