定义平面二维点类CPoint,有数据成员x坐标,y坐标,函数成员(构造函数、虚函数求面积GetArea, 虚函数求体积函数GetVolume、输出点信息函数print。
由CPoint类派生出圆类Cirle类(新增数据成员半径radius),函数成员(构造函数、求面积GetArea,虚函数求体积函数GetVolume、输出圆面积信息函数print。
再由Ccirle类派生出圆柱体Ccylinder类(新增数据成员高度height),函数成员(构造函数、求表面积GetArea ,求体积函数GetVolume、输出圆柱体体积信息函数print。在主函数测试这个这三个类。
打印数据保留小数点后2位
输入格式:
点的:x坐标
点的:y坐标
圆半径
圆柱高
输出格式:
点信息
圆面积
圆柱体积
输入样例:
在这里给出一组输入。例如:
1
2
3
4
输出样例:
在这里给出相应的输出。例如:
CPoint:1,2
CirleArea:28.26
CcylinderVolume:113.04
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
全部代码:
#include<bits/stdc++.h>
using namespace std;
class cpoint{
protected:
int x,y;
public:
cpoint(int x,int y):x(x),y(y)
{
}
void setpoint(int a,int b) //标记坐标
{
x=a;
y=b;
}
virtual double getarea(){
} //根据题上要求写就是了,这个面积没法算,我们最后也用不到,就没必要写完整
//写个函数名放着就可以了,当然也可以选择不写,只写最后能用到的函数就OK
virtual double getvol(){
}
virtual void print()
{
cout<<"CPoint:"<<x<<","<<y<<endl;
}
};
class cirle:public cpoint{
protected: //其实这里我也不太明白,我之前写的派生都是私有成员,但是这道题不行
double r; //我就改成了保护成员,我也不太清楚为啥不行
public:
cirle(int x,int y,double c):cpoint(x,y),r(c) //这里直接通过cpoint构造函数传进来x,y
{
}
virtual double getarea(){ //像这个,我们能用到,就把它写完整
return r*r*3.14;
}
virtual double getvol(){ //而这个,我们用不到,写个函数名放着就行,不写也可以
}
virtual void print()
{
cout<<"CirleArea:"<<fixed<<setprecision(2)<<cirle::getarea()<<endl; //输出直接写类的函数是不行的
} //可以写成“类名::函数名”这样就能调用了
};
class cylinder:public cirle{
private:
double h;
public:
cylinder(int a,int b,double c,double d):cirle(a,b,c),h(d) //直接用cirle构造传进来a,b,c
{
}
virtual double getarea(){
}
virtual double getvol(){
return r*r*h*3.14; //这里用到的是体积,我们就写个体积函数就好
}
virtual void print()
{
cout<<"CcylinderVolume:"<<fixed<<setprecision(2)<<cylinder::getvol()<<endl;
}
};
int main()
{
int x,y,r,h;
cin>>x>>y>>r>>h;
cpoint A(x,y);
A.setpoint(x,y);
A.print();
cirle B(x,y,r);
B.getarea();
B.print();
cylinder C(x,y,r,h);
C.getvol();
C.print();
}