首页 > 其他分享 >第十三天第二个问题

第十三天第二个问题

时间:2023-04-27 20:13:15浏览次数:32  
标签:const Point double 问题 第二个 radius Cone Circle 第十三天

问题描述:

6-7 【CPP0029】以圆类Circle及立体图形类Solid为基础设计圆锥类Cone 分数 10 作者 C++多态编程 单位 石家庄铁道大学

以点类Point及平面图形类Plane为基类公有派生圆类Circle,再以圆类Circle及立体图形类Solid为基类公有派生圆锥类Cone,main(void)函数完成对圆锥类Cone的测试。

Point类结构说明:

 
Point类的数据成员包括:
①私有数据成员:X坐标x(double型),Y坐标y(double型)。
Point类成员函数包括:
①有参构造函数Point(double, double)和拷贝构造函数Point(const  Point  &),其中有参构造函数参数默认值为0,输出信息“Point Constructor run”,拷贝构造函数输出信息“Point CopyConstructor run”
②析构函数,析构函数输出信息“Point Destructor run”
③公有函数成员:void  setX(double)和double getX() const分别返回和设置X坐标
④公有函数成员:void  setY(double)和double getY() const分别返回和设置Y坐标
⑤公有成员函数void show() const用于显示点的坐标信息,显示格式为:Point(X=<X坐标>,Y=<Y坐标>)
 

Plane类结构说明:

 
Plane类的成员函数包括:
①纯虚函数virtual double length()const用于计算平面图形的周长
②纯虚函数virtual double area()const用于计算平面图形的面积
 

Solid类结构说明:

 
Solid类的成员函数包括:
①纯虚函数virtual double volume()const用于计算立体图形的体积
②纯虚函数virtual double s_Area()const用于计算立体图形的表面积
 

Circle类结构说明:

 
公有派生圆类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用于计算圆的周长
 

Cone类结构说明:

 
公有派生圆锥类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用于计算圆锥的体积
 

裁判测试程序样例:

 
#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;
}
 

输入样例:

1.0
 

输出样例:

Point Constructor run
Circle Constructor run
Cone Constructor run
Point CopyConstructor run
Circle CopyConstructor run
Cone CopyConstructor run
Cone(Circle(Point(X=1,Y=2),Radius=3),Height=4)
Area=28.2743
Length=18.8495
S_Area=75.3982
Volumn=37.6991
Cone(Circle(Point(X=1,Y=2),Radius=3),Height=1)
Area=28.2743
Length=18.8495
S_Area=58.078
Volumn=9.42477
Cone Destructor run
Circle Destructor run
Point Destructor run
Cone Destructor run
Circle Destructor run
Point Destructor run
代码:

class Circle: public Point, public Plane {
protected:
static const double PI;
double radius;
public:
Circle(double x = 0, double y = 0, double radius = 0)
:Point(x, y), radius(radius) {
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 radius) {
this->radius = radius;
}
double getR() const {
return radius;
}
void show() const {
cout << "Circle(";
Point::show();
cout << ",Radius=" << radius << ")";
}
double area() const {
return PI * radius * radius;
}
double length() const {
return 2 * PI * radius;
}

};
const double Circle::PI = 3.14159;

class Cone: public Circle, public Solid {
private:
double height;
public:
Cone(double x = 0, double y = 0, double radius = 0, double height = 0)
:Circle(x, y, radius), height(height) {
cout << "Cone Constructor run" << endl;
}
Cone(const Cone& c) :Circle(c), height(c.height) {
cout << "Cone CopyConstructor run" << endl;
}
~Cone() {
cout << "Cone Destructor run" << endl;
}
void setH(double height) {
this->height = height;
}
void show() const {
cout << "Cone(";
Circle::show();
cout << ",Height=" << height << ")";
}
double s_Area() const {
return PI * radius * (radius + sqrt(radius * radius + height * height));
}
double volume() const {
return PI * radius * radius * height / 3;
}
};

标签:const,Point,double,问题,第二个,radius,Cone,Circle,第十三天
From: https://www.cnblogs.com/czfznb/p/17360094.html

相关文章

  • 背包问题-动态规划
    概念背包问题是一类组合优化问题,抽象定义:有一系列的物品,每样都有重量和价值,选择一些物品使得总的重量不超过限制,总的价值尽可能大。背包是一种隐喻,即假设某人有固定容量的背包,怎样选择物品,使得物品的总价值最高。应用投资组合选择原料最优化切割Merkle–Hellman密钥的生......
  • 最短路问题
    \[最短路\begin{cases}\单源最短路\quad\begin{cases}\所有边权都是正数\quad\begin{cases}\朴素Dijkstra算法\quad\\[3ex]堆优化版Dijkstra算法\quad\end{cases}\\\[5ex]存在负权边\quad\begin{cases}\Bell-Ford算法\quad\\[3ex]SPFA算法\quad\end{cases......
  • springboot分页插件的问题
    1:maven依赖的问题此类原因是与pom.xml文件中引入的分页依赖有关,由于springboot本身集成pagerhelper的分页插件,只需要引入如下依赖即可<!--spring-bootmybatispagehelper--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-st......
  • 前端JavaScript的精确计算问题
    问题发现"47.900000"*"771.65" = 36962.034999999996 (错误)  36962.035(正确)问题定位JavaScript前端计算不精确(浮点数计算的精确问题)问题解决除法函数,用来得到精确的除法结果说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比......
  • 线上问题排查回答(转载)
    面试官:「你是怎么定位线上问题的?」这个面试题我在两年社招的时候遇到过,前几天面试也遇到了。我觉得我每一次都答得中规中矩,今天来梳理复盘下,下次又被问到的时候希望可以答得更好。下一次我应该会按照这个思路去答:1、如果线上出现了问题,我们更多的是希望由监控告警发现我们出了......
  • GridView 同行item高度不一致问题
    GridView同行item高度不一致问题//bug场景:item高度不一致,存在留白间隙 解决办法:将GridView添加到它本身的适配器当中,新增ViewHolder(目的是在GridView初始化完成后,适配器方便操作GridView,直接在适配器getView方法中对converView进行操作),计算GridView高度,并设置GridView......
  • java处理逻辑表达式计算问题
    在处理SQL的where条件时,发现逻辑运算表达式不是那么简单,并不是一种线型计算结构。但是表达式树的计算又是SQL查询引擎的核心,SQL的抽象语法树最终还是要转换为表达式树来处理。所以基于原来的表达式案例,进行简单的升级,写了一个简单的逻辑表达式处理器。首先我们的逻辑表达式的操......
  • 解决Kibana(OpenSearch)某些字段无法搜索问题
    背景最近在OpenSearch查看线上日志的时候,发现某个索引下有些字段无法直接在界面上筛选,搜索到也不高亮,非常的不方便,就像下面这样字段左侧两个筛选按钮禁用了无法点击,提示Unindexedfiledscannotbesearched右侧则有感叹号提示Nocachedmappingforthisfield.Refresh......
  • 解决docker in docker http推送问题
    FROMdocker:18.09-dindENVDOCKER_HOST=unix:///var/run/docker.sockADD./main/bin/RUNmkdir-p/etc/docker&&echo-e'{"insecure-registries":["ip:5000"]}'>/etc/docker/daemon.jsonENTRYPOINT["/usr/local/......
  • 生产者消费者问题
    1、//condition_variable::notify_one#include<iostream>//std::cout#include<thread>//std::thread#include<mutex>//std::mutex,std::unique_lock#include<condition_variable>//std::condi......