5.19作业
一问题
以点类Point及平面图形类Plane为基类公有派生圆类Circle,再以圆类Circle及立体图形类Solid为基类公有派生圆柱类Cylinder,main(void)函数完成对圆柱类Cylinder的测试。
二 代码
#include <iostream>
using namespace std;
//点类Point
class Point{
private:
double x;
double y;
public:
Point(double xv=0,double yv=0);/*构造函数*/
Point(const Point &p); /*拷贝构造*/
~Point(); /*析构函数*/
void setX(double xv); /*设置X坐标*/
void setY(double yv); /*设置Y坐标*/
double getX()const; /*获取X坐标*/
double getY()const; /*获取Y坐标*/
virtual void show()const; /*显示*/
};
Point::Point(const double xv,const double yv){/*构造函数*/
x=xv;
y=yv;
cout<<"Point Constructor run"<<endl;
}
Point::Point(const Point &p){/*拷贝构造*/
x=p.x;
y=p.y;
cout<<"Point CopyConstructor run"<<endl;
}
Point::~Point(){/*析构函数*/
cout<<"Point Destructor run"<<endl;
}
void Point::setX(double xv){/*设置X坐标*/
x=xv;
}
void Point::setY(double yv){/*设置Y坐标*/
y=yv;
}
double Point::getX()const{/*获取X坐标*/
return x;
}
double Point::getY()const{/*获取Y坐标*/
return y;
}
void Point::show()const{/*显示*/
cout<<"Point(X="<<x<<",Y="<<y<<")";
}
//平面图形类Plane
class Plane{
public:
virtual double length()const=0;/*周长*/
virtual double area()const=0; /*面积*/
};
//立体图形类Solid
class Solid{
public:
virtual double volume()const=0;/*体积*/
virtual double s_Area()const=0;/*表面积*/
};
class Circle:public Point,public Plane
·······double·s_Area()const;
·······double·volume()const;
};
Cylinder::Cylinder(double·a,·double·b,·double·c,·double·h):Circle(a,b,c)
{
····height=h;
····cout<<"Cylinder·Constructor·run"<<endl;
}
Cylinder::Cylinder(const·Cylinder·&c):Circle(c)
{
····height=c.height;
····cout<<"Cylinder·CopyConstructor·run"<<endl;
}
Cylinder::~Cylinder()
{
····cout<<"Cylinder·Destructor·run"<<endl;
}
void·Cylinder::setH(double·a)
{
····height=a;
}
double·Cylinder::getH()const{return·height;}
void·Cylinder::show()const
{
····cout<<"Cylinder(Circle(Point(X=";
····cout<<getX()<<",Y="<<getY();
····cout<<"),Radius="<<getR();
····cout<<"),Height="<<getH();
····cout<<")";
}
double·Cylinder::s_Area()const
{
····double·a=2*area()+length()*height;
····return·a;
}
double·Cylinder::volume()const
{
····double·a=area()*height;
····return·a;
}
void show(Point *p){/*点基类的显示函数*/
p->show();
}
void length(Plane *p){/*平面图形的周长函数*/
cout<<"Length="<<p->length()<<endl;
}
void area(Plane &p){/*平面图形的面积函数*/
cout<<"Area="<<p.area()<<endl;
}
void volumn(Solid *s){/*立体图形的体积函数*/
cout<<"Volumn="<<s->volume()<<endl;
}
void s_Area(Solid &s){/*立体图形的表面积函数*/
cout<<"S_Area="<<s.s_Area()<<endl;
}
//主函数
int main(void){
double h;
cin>>h;
Cylinder cy1(1,2,3,4),cy2(cy1);
show(&cy1);
cout<<endl;
area(cy1);
length(&cy1);
s_Area(cy1);
volumn(&cy1);
cy2.setH(h);
show(&cy2);
cout<<endl;
area(cy2);
length(&cy2);
s_Area(cy2);
volumn(&cy2);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」