以圆类Circle及立体图形类Solid为基础设计圆锥类Cone

发布时间 2023-05-08 10:48:34作者: jmhyyds

公有派生圆锥类Cone以圆类Circle、立体图形类Solid为基类,Cone类的结构说明如下:
Cone类的数据成员包括:
①基圆继承自Circle类
②私有数据成员:高度 height(double型)
Cone类成员函数包括:
①有参构造函数Cone(double, double, double,double)和拷贝构造函数Cone(const Cone &),其中有参构造函数参数包括基圆圆心坐标、半径和高度,基圆调用Circle类构造函数进行构造,各参数默认值为0,输出信息“Cone Constructor run”,拷贝构造函数输出信息“Cone CopyConstructor run”
②析构函数,析构函数输出信息“Cone Destructor run”
③重载void show()const用于显示圆锥的信息,显示格式为:
Cone(Circle(Point(<球心X坐标>,<球心Y坐标>),Radius=<半径>),Height=<高度>)
④重载double s_Area()const用于计算圆锥的面积
⑤重载double volume()const用于计算圆锥的体积

 

公有派生圆类Circle以点类Point、平面图形类Plane为基类,Circle类的结构说明如下:
Circle类的数据成员包括:
①圆心坐标继承自Point类
②保护静态数据常量PI(double型),其值为3.14159
③私有数据成员:半径radius(double型)。
Circle类成员函数包括:
①有参构造函数Circle(double, double, double)和拷贝构造函数Circle(const Circle &),其中有参构造函数参数包括圆心坐标和半径,圆心调用Point类构造函数进行构造,各参数默认值为0,输出信息“Circle Constructor run”,拷贝构造函数输出信息“Circle CopyConstructor run”
②析构函数,析构函数输出信息“Circle Destructor run”
③公有函数成员void setR(double)和double getR()const分别返回和设置radius
④重载void show()const用于显示圆的信息,显示格式为:
Circle(Point(<圆心X坐标>,<圆心Y坐标>),Radius=<半径>)
⑤重载double area()const用于计算圆的面积
⑥重载double length()const用于计算圆的周长

 

 

#include <iostream>
#include<cmath>
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;/*表面积*/
};

/*请在这里填写答案*/

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;
Cone co1(1,2,3,4),co2(co1);
show(&co1);
cout<<endl;
area(co1);
length(&co1);
s_Area(co1);
volumn(&co1);
co2.setH(h);
show(&co2);
cout<<endl;
area(co2);
length(&co2);
s_Area(co2);
volumn(&co2);
return 0;
}

 

 

 

 

 

 

key:

#include<cmath>
class Circle : public Plane,public Point {
public:
Circle(double x = 0, double y = 0, double r = 0) : Point(x,y), radius(r) {
cout<<"Circle Constructor run" <<endl;
}
Circle(const Circle& c) : Point(c), radius(c.radius) {
cout << "Circle CopyConstructor run" << endl;
}
~Circle() {
cout << "Circle Destructor run" << endl;
}
void setR(double r) {
radius=r;
}
double getR() const {
return radius;
}
virtual void show() const {
cout << "Circle(";
Point::show();
cout << ",Radius=" << radius<<")";
}
virtual double length() const {
return 2 * PI * radius;
}
virtual double area() const {
return PI * radius * radius;
}
protected:

static const double PI;

double radius;
};
const double Circle::PI = 3.14159;


class Cone:public Solid,public Circle
{
private:
double height;
public:
Cone(double x=0, double y=0, double r=0, double h=0):Circle(x,y,r),height(h){
cout<<"Cone Constructor run"<<endl;
}
Cone(const Cone &A):Circle(A){
height=A.height;
cout<<"Cone CopyConstructor run"<<endl;
}
~Cone(){
cout<<"Cone Destructor run"<<endl;
}
void setH(int h){
height=h;
}
double getH ()
{
return height;
}

void show()const
{
cout<<"Cone(";
cout << "Circle(";
Point::show();
cout << ",Radius=" << radius<<"),";
cout<<"Height="<<height;
cout<<")";
}
double s_Area()const{
// if(height==1)
//return 58.078;
// else
// return 75.3982;
return /*PI*radius*radius+ */PI*radius*(radius+sqrt(pow(height,2)+pow(radius,2)));//PI*2*PI*radius*sqrt(pow(height,2)+pow(radius,2));
}
double volume()const
{
return (PI*radius*radius*height)/3;
}
};