2023/5/25

7-1 用虚函数分别计算各种图形的面积
分数 20
作者 沙金
单位 石家庄铁道大学

定义抽象基类Shape,由它派生出五个派生类:Circle(圆形)、Square(正方形)、Rectangle( 长方形)、Trapezoid (梯形)和Triangle (三角形),用虚函数分别计算各种图形的面积,并求出它们的和。要求用基类指针数组。使它的每一个元素指向一个派生类的对象。PI=3.1415926

输入格式:

请在这里写输入格式。例如:输入在一行中给出9个大于0的数,用空格分隔,分别代表圆的半径,正方形的边长,矩形的宽和高,梯形的上底、下底和高,三角形的底和高。

输出格式:

请在这里描述输出格式。例如:输出所有图形的面积和,小数点后保留3位有效数字。

输入样例:

在这里给出一组输入。例如:

12.6 3.5 4.5 8.4 2.0 4.5 3.2 4.5 8.4
 

输出样例:

在这里给出相应的输出。例如:

total of all areas = 578.109
#include<iostream>
using namespace std;
#define PI 3.1415926
class Shape{
    public: 
    virtual float area()=0;
    Shape(){}
};

class Circle:public Shape
{
public:
Circle(float r1)
{
r=r1;
}
float area()
{
//float s;
s=PI*r*r;
return s;
}
private:
float r,s;
};

class Square:public Shape
{
public:
Square(float b1)
{
b=b1;
}
float area()
{
//float s;
s=b*b;
return s;
}
private:
float b,s;
};

class Rectangle:public Shape
{
public:
Rectangle(float a2,float b1)
{
w=a2;
h=b1;
}
float area()
{
//float s;
s=w*h;
return s;
}
private:
float w;
float h;
float s;

};

class Trapezoid:public Shape
{
public:
Trapezoid(float a1,float b1,float c1)
   {
a=a1;
b=b1;
c=c1;
   }
   
   
float area()
   {
float s;
s=(a+b)*c/2.0;
return s;
   }

private:
float a,b,c;

};

class Triangle:public Shape
{
public:
Triangle(float a1,float b1)
{
a=a1;
b=b1;
}
float area()
{
//loat s;
s=a*b/2.0;
return s;
}
private:
float a,b,s;
};

int main()
{
    float a[9];
    for(int i=0;i<9;i++)
        cin>>a[i];
    Shape*b[5];
    b[0]=new Circle(a[0]);
    b[1]=new Square(a[1]);
    b[2]=new Rectangle(a[2],a[3]);
    b[3]=new Trapezoid(a[4],a[5],a[6]);
    b[4]=new Triangle(a[7],a[8]);
    float sum;
    sum=b[0]->area()+b[1]->area()+b[2]->area()+b[3]->area()+b[4]->area();
    cout<<"total of all areas = "<<sum;
}

 

posted on 2023-05-25 22:11  清荣峻茂  阅读(39)  评论(0)    收藏  举报