写一个程序,定义抽象基类Shape,由它派生出5个派生类

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

 

  
  
  
  
  1. #include<iostream>  
  2. using namespace std;  
  3. /*  
  4.     圆面积S=3.14*r*r  
  5.     矩形面积S=长*宽  
  6.     三角形面积S=(底*高)/2  
  7.     正方形面积S=a*a  
  8.     梯形面积S=((上底+下底)*高)/2  
  9. */ 
  10. class Shape//抽象基类  
  11. {  
  12. public:  
  13.     virtual float area()const=0;  
  14.     virtual void display()const=0;  
  15. };  
  16. class Circle:public Shape// 园面积  
  17. {  
  18. public:  
  19.     Circle(double a):r(a){}  
  20.     virtual float area()const{return 3.14*r*r;}  
  21.     virtual void display()const 
  22.     {  
  23.         cout<<"圆面积"<<area()<<endl;  
  24.     }  
  25.     
  26. private:  
  27.     double r;  
  28. };  
  29.  
  30. class Rectangle:public Shape//矩形面积  
  31. {  
  32. public:  
  33.     Rectangle(double a,double b):l(a),w(b){}  
  34.     virtual float area()const{return l*w;}  
  35.         virtual void display()const 
  36.     {  
  37.         cout<<"矩形面积"<<area()<<endl;  
  38.     }  
  39. private:  
  40.     double l;  
  41.     double w;  
  42. };  
  43. class Triangle:public Shape//三角形面积  
  44. {  
  45. public:  
  46.     Triangle(double a,double b):d(a),h(b){}  
  47.     virtual float area()const{return (d*h)/2;}  
  48.         virtual void display()const 
  49.     {  
  50.         cout<<"三角形面积"<<area()<<endl;  
  51.     }  
  52. private:  
  53.     double d;  
  54.     double h;  
  55. };  
  56. class Square:public Shape//正方形面积  
  57. {  
  58. public:  
  59.     Square(double a):a1(a){}  
  60.     virtual float area()const{return a1*a1;}  
  61.         virtual void display()const 
  62.     {  
  63.         cout<<"正方形面积"<<area()<<endl;  
  64.     }  
  65. private:  
  66.     double a1;  
  67. };  
  68. class Trapezoid:public Shape//梯形面积  
  69. {  
  70. public:  
  71.     Trapezoid(double sd,double xd,double h):shad(sd),xiad(xd),hight(h){}  
  72.     virtual float area()const{return ((shad+xiad)*hight)/2;}  
  73.         virtual void display()const 
  74.     {  
  75.         cout<<"梯形面积"<<area()<<endl;  
  76.     }  
  77. private:  
  78.     double shad;  
  79.     double xiad;  
  80.     double hight;  
  81. };  
  82.  
  83. int main()  
  84. {  
  85.       
  86.     Circle c1(4);  
  87.     Rectangle r1(3,6);  
  88.     Triangle t1(2.5,5);  
  89.     Square s1(3.4);  
  90.     Trapezoid tr1(3.2,4.5,7);  
  91.     Shape *p[5]={&c1,&r1,&t1,&s1,&tr1};  
  92.  
  93.     int i;  
  94.     double m=0.0;  
  95.     for (i=0;i<5;i++)  
  96.       {  
  97.           p[i]->display();  
  98.           m=m+p[i]->area();  
  99.     }  
  100.  
  101.  
  102.     cout<<"总面积:"<<m<<endl;  
  103.