题目描述
定义一个抽象类Shape,包含三个数据成员:名称、x和y坐标
包含五个虚函数分别是:名称以及x和y的get方法,求面积(返回0.0)、求体积(返回0.0)
包含一个纯虚函数shapeName,用于设置名称。
定义Point类继承Shape,在构造函数初始化x和y坐标,设置名称为"Point"
定义Circle类继承Point,新增数据r表示半径,设置名称为"Circle",其他函数根据需要自己编写
定义Cylinder类继承Circle,新增数据h表示高度,设置名称为"Cylinder",其他函数根据需要自己编写
要求上述派生类的设置名称不是在构造函数,是在…
编写一个全局函数Print,无返回值,含单个参数为Shape*类型,功能是输出图形的五个信息:名称、x和y坐标、面积、体积,要求输出必须使用抽象类的五个虚函数输出五个信息
输出格式看参考样例,面积和体积只需要输出整数部分(非四舍五入),圆周率为3.14159
要求程序中必须使用抽象类的…来创建Point、Circle、Cylinder类对象
输入
第一行输入一个点的X和Y坐标
第二行输入一个圆的X和Y坐标、半径
第三行输入一个柱体的X和Y坐标、半径、高度
输出
要求调用Print方法输出图形的信息,每个图形输出一行。
输入样例
1.1 2.2
3.3 4.4 5.5
6.6 7.7 8.8 9.9
输出样例
Point–(1.1,2.2)–0–0
Circle–(3.3,4.4)–95–0
Cylinder–(6.6,7.7)–1033–2408
代码
#include<iostream>
using namespace std;
#define PI 3.14159
class Shape{
protected:
string name;
float x,y;
public:
Shape(float x,float y):x(x),y(y){}
virtual string getname()=0;
virtual float getx(){return x;}
virtual float gety(){return y;}
virtual float area(){return 0.0;}
virtual float V(){return 0.0;}
};
class Point:public Shape{
public:
Point(float x1,float y1):Shape(x1,y1){}
virtual string getname(){return name="Point";}
};
class Circle:public Point{
private:
float R;
public:
Circle(float x1,float y1,float r):Point(x1,y1),R(r){}
virtual float area(){
return (PI*R*R);
}
virtual float getR(){return R;}
virtual string getname(){return name="Circle";}
};
class Cylinder:public Circle{
private:
float Height;
public:
Cylinder(float x1,float y1,float r,float h):Circle(x1,y1,r),Height(h){}
virtual float V(){
return (PI*getR()*getR()*Height);
}
virtual float area(){
return (PI*getR()*getR()*2+2*PI*getR()*Height);
}
virtual string getname(){return name="Cylinder";}
};
void Print(Shape *p){
cout<<p->getname()<<"--("<<p->getx()<<','<<p->gety()<<")--"<<(int)(p->area())<<"--"<<(int)(p->V()) << endl;
}
int main()
{
float x1,y1,r,h;
Shape* p;
cin>>x1>>y1;
p=new Point(x1,y1);
Print(p);
cin>>x1>>y1>>r;
p=new Circle(x1,y1,r);
Print(p);
cin>>x1>>y1>>r>>h;
p=new Cylinder(x1,y1,r,h);
Print(p);
}