题目内容:
定义抽象基类Shape, 其中纯虚函数printName()输出几何图形的名称和相应的成员数据、纯虚函数printArea()计算几何图形的面积。并由Shape类派生出5个派生类:Circle(圆形),数据成员为半径、Square(正方形) ,数据成员为边长、Rectangle(长方形) ,数据成员为长和宽、Trapezoid(梯形) ,数据成员为上底、下底和高、Triangle(三角形) ,数据成员为底和高。测试过程,定义一个指向基类的指针数组,使其每个元素指向一个动态产生的派生类对象,分别调用相应的成员函数显示各个几何图形的属性及面积,最终输出总面积值。
输入格式:
依次输入圆半径、正方形边长、长方形长宽、梯形上底下底和高、三角形底边和高,均为实数。
输出格式:
请参考输出样例,建议直接复制样例中的部分文字粘贴进自己的代码。圆周率取 3.14159
注意输出中的标点符号、空格。
输入样例:
10
5
2 4
1 2 3
4 3
输出样例:
圆:半径=10,面积:314.159
正方形:边长=5,面积:25
长方形:长=2,宽=4,面积:8
梯形:上底=1,下底=2,高=3,面积:4.5
三角形:底边=4,高=3,面积:6
总面积:357.659
时间限制:500ms内存限制:32000kb
#include<iostream>
using namespace std;
#define PI 3.14159
class Shape
{
public:
virtual void printName()=0;
virtual double printArea()=0;
};
class Circle:public Shape
{
double r;
public:
Circle(double r)
{
this->r=r;
}
virtual void printName()
{
cout<<"圆:"<<"半径="<<r<<",";
}
virtual double printArea()
{
return PI*r*r;
}
};
class Square:public Shape
{
double a;
public:
Square(double a)
{
this->a=a;
}
virtual void printName()
{
cout<<"正方形:"<<"边长="<<a<<",";
}
virtual double printArea()
{
return a*a;
}
};
class Rectangle:public Shape
{
double a,b;
public:
Rectangle(double a,double b)
{
this->a=a;
this->b=b;
}
virtual void printName()
{
cout<<"长方形:"<<"长="<<a<<","<<"宽="<<b<<",";
}
virtual double printArea()
{
return a*b;
}
};
class Trapezoid:public Shape
{
double m,n,h;
public:
Trapezoid(double m,double n,double h)
{
this->m=m;
this->n=n;
this->h=h;
}
virtual void printName()
{
cout<<"梯形:"<<"上底="<<m<<","<<"下底="<<n<<","<<"高="<<h<<",";
}
virtual double printArea()
{
return (m+n)*h/2;
}
};
class Triangle:public Shape
{
double m,h;
public:
Triangle(double m,double h)
{
this->m=m;
this->h=h;
}
virtual void printName()
{
cout<<"三角形:"<<"底边="<<m<<","<<"高="<<h<<",";
}
virtual double printArea()
{
return m*h/2;
}
};
int main()
{
double a1;
double b1;
double c1,c2;
double d1,d2,d3;
double e1,e2;
cin>>a1;
cin>>b1;
cin>>c1>>c2;
cin>>d1>>d2>>d3;
cin>>e1>>e2;
Shape *s[5];
Circle circle1(a1);
Square square1(b1);
Rectangle rele1(c1,c2);
Trapezoid td1(d1,d2,d3);
Triangle tre1(e1,e2);
s[0]=&circle1;
s[1]=&square1;
s[2]=&rele1;
s[3]=&td1;
s[4]=&tre1;
s[0]->printName();
cout<<"面积:"<<s[0]->printArea()<<endl;
s[1]->printName();
cout<<"面积:"<<s[1]->printArea()<<endl;
s[2]->printName();
cout<<"面积:"<<s[2]->printArea()<<endl;
s[3]->printName();
cout<<"面积:"<<s[3]->printArea()<<endl;
s[4]->printName();
cout<<"面积:"<<s[4]->printArea()<<endl;
cout<<"总面积:"<<s[0]->printArea()+s[1]->printArea()+s[2]->printArea()+s[3]->printArea()+s[4]->printArea()<<endl;
return 0;
}