写一个程序,定义抽象基类Shape,由它派生出5个派生类,Cirle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分别计算几种图形面积,并求他们的和。要求用基类指针数组,使它的每一个元素指向一个派生类对象。
- #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;
- }