寫一個程序,定義抽象基類Shape,由它派生出5個派生類,Cirle(圓形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虛函數分別計算幾種圖形面積,並求他們的和。要求用基類指針數組,使它的每個元素指向一個派生類對象。ios
- #include<iostream>
- using namespace std;
- /*
- 圓面積S=3.14*r*r
- 矩形面積S=長*寬
- 三角形面積S=(底*高)/2
- 正方形面積S=a*a
- 梯形面積S=((上底+下底)*高)/2
- */
- class Shape//抽象基類
- {
- public:
- virtual float area()const=0;
- virtual void display()const=0;
- };
- class Circle:public Shape// 園面積
- {
- public:
- Circle(double a):r(a){}
- virtual float area()const{return 3.14*r*r;}
- virtual void display()const
- {
- cout<<"圓面積"<<area()<<endl;
- }
- private:
- double r;
- };
- class Rectangle:public Shape//矩形面積
- {
- public:
- Rectangle(double a,double b):l(a),w(b){}
- virtual float area()const{return l*w;}
- virtual void display()const
- {
- cout<<"矩形面積"<<area()<<endl;
- }
- private:
- double l;
- double w;
- };
- class Triangle:public Shape//三角形面積
- {
- public:
- Triangle(double a,double b):d(a),h(b){}
- virtual float area()const{return (d*h)/2;}
- virtual void display()const
- {
- cout<<"三角形面積"<<area()<<endl;
- }
- private:
- double d;
- double h;
- };
- class Square:public Shape//正方形面積
- {
- public:
- Square(double a):a1(a){}
- virtual float area()const{return a1*a1;}
- virtual void display()const
- {
- cout<<"正方形面積"<<area()<<endl;
- }
- private:
- double a1;
- };
- class Trapezoid:public Shape//梯形面積
- {
- public:
- Trapezoid(double sd,double xd,double h):shad(sd),xiad(xd),hight(h){}
- virtual float area()const{return ((shad+xiad)*hight)/2;}
- virtual void display()const
- {
- cout<<"梯形面積"<<area()<<endl;
- }
- private:
- double shad;
- double xiad;
- double hight;
- };
- int main()
- {
- Circle c1(4);
- Rectangle r1(3,6);
- Triangle t1(2.5,5);
- Square s1(3.4);
- Trapezoid tr1(3.2,4.5,7);
- Shape *p[5]={&c1,&r1,&t1,&s1,&tr1};
- int i;
- double m=0.0;
- for (i=0;i<5;i++)
- {
- p[i]->display();
- m=m+p[i]->area();
- }
- cout<<"總面積:"<<m<<endl;
- }