7-2 抽象基类Shape派生3个类 分数 15 作者 沙金 单位 石家庄铁道大学
声明抽象基类Shape,由它派生出三个类,圆形Circle,矩形Rectangle,三角形Triangle,用一个函数输出三个面积。
输入格式:
在一行中依次输入5个数,圆的半径,长方形的高和宽,三角形的高和底,中间用空格分隔
输出格式:
圆的面积,长方形的面积,三角形的面积,小数点后保留2位有效数字,每个面积占一行。
输入样例:
在这里给出一组输入。例如:
3 3 4 3 4
输出样例:
在这里给出相应的输出。例如:
28.27
12.00
6.00
#include<iostream>
#include<iomanip>
using namespace std;
#define PI 3.1415926
class Shape
{
public:
virtual float area()=0;
};
class Circle:public Shape
{
public:
Circle(float r1)
{
r=r1;
}
float area()
{
s=PI*r*r;
return s;
}
private:
float r;
float s;
};
class Rectangle:public Shape
{
public:
Rectangle(float a1,float b1)
{
a=a1;
b=b1;
}
float area()
{
s=a*b;
//printf("%.2lf",s);
return s;
}
private:
float a,b;
float s;
};
class Triangle:public Shape
{
public:
Triangle(float a1,float b1)
{
a=a1;
b=b1;
}
float area()
{
s=a*b/2;
return s;
//printf("%.2lf",s);
}
private:
float a,b;
float s;
};
int main()
{
Shape*a[3];
float b[5];
for(int i=0;i<5;i++)
{
cin>>b[i];
}
a[0]=new Circle(b[0]);
a[1]=new Rectangle(b[1],b[2]);
a[2]=new Triangle(b[3],b[4]);
//float sum;
cout<<fixed;
cout<<setprecision(2)<<a[0]->area()<<endl; //设置有效数字
cout<<setprecision(2)<<a[1]->area()<<endl;
cout<<setprecision(2)<<a[2]->area()<<endl;
//printf("%.2lf\n",a[0]->area());
// printf("%.2lf\n",a[1]->area());
//printf("%.2lf\n",a[2]->area());
return 0;
}