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;
}