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

第十一天第二个问题

时间:2023-04-25 20:14:05浏览次数:34  
标签:第十一天 const Point double void 问题 第二个 run Circle

问题描述:

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

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用于计算平面图形的面积

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用于计算圆的周长

裁判测试程序样例:

#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();                      /*析构函数*/
    virtual void show()const;      /*显示*/
    void setX(double xv);          /*设置X坐标*/
    void setY(double yv);          /*设置Y坐标*/
    double getX() const;           /*获取X坐标*/
    double getY() const;           /*获取Y坐标*/
};
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::show() const{/*显示*/
    cout<<"Point(X="<<x<<",Y="<<y<<")";
}
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;
}
class Plane{/*平面图形基类*/
public:
    virtual double length()const=0;/*周长*/
    virtual double 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;
}
//主函数
int main(void){
    double x,y,r;
    Circle c1,c2(c1);
    show(&c1);
    cout<<endl;
    area(c1);
    length(&c1);
    cin>>x>>y>>r;
    c2.setX(x);
    c2.setY(y);
    c2.setR(r);
    show(&c2);
    cout<<endl;
    area(c2);
    length(&c2);
}

输入样例:

1.0 2.0 3.0

输出样例:

Point Constructor run
Circle Constructor run
Point CopyConstructor run
Circle CopyConstructor run
Circle(Point(X=0,Y=0),Radius=0)
Area=0
Length=0
Circle(Point(X=1,Y=2),Radius=3)
Area=28.2743
Length=18.8495
Circle Destructor run
Point Destructor run
Circle Destructor run
Point Destructor run
代码:

#include <cmath>
class Circle : public Point, public Plane{
private:
double radius;
static const double PI;
public:
Circle(double xv=0.0, double yv=0.0, double rv=0.0);
Circle(const Circle &c);
~Circle();
void setR(double rv);
double getR() const;
virtual void show() const;
virtual double length() const;
virtual double area() const;
};

const double Circle::PI = 3.14159;

Circle::Circle(double xv, double yv, double rv) : Point(xv, yv) {
radius = rv;
cout << "Circle Constructor run" << endl;
}

Circle::Circle(const Circle &c) : Point(c) {
radius = c.radius;
cout << "Circle CopyConstructor run" << endl;
}

Circle::~Circle() {
cout << "Circle Destructor run" << endl;
}

void Circle::setR(double rv) {
radius = rv;
}

double Circle::getR() const {
return radius;
}

void Circle::show() const {
cout << "Circle(Point(X=" << getX() << ",Y=" << getY() << "),Radius=" << radius << ")";
}

double Circle::length() const {
return 2 * PI * radius;
}

double Circle::area() const {
return PI * pow(radius, 2);
}

 

 

 

 

标签:第十一天,const,Point,double,void,问题,第二个,run,Circle
From: https://www.cnblogs.com/czfznb/p/17353688.html

相关文章

  • 第十一天第一个问题
    问题描述:编写模板函数max5(),他将由一个T类型元素组成的数组作为参数,并返回数组中最大的元素(由于长度固定,因此可以在循环中使用硬编码,而不必通过参数来传递)。在一个程序中使用该函数,将T替换为一个包含5个int值的数组和一个包含5个double值的数组,以测试该函数。解决方法:1.建立一个模......
  • 深度学习--RNN实战与存在问题
    深度学习--RNN实战与存在问题时间序列预测importnumpyasnpimporttorchimporttorch.nnasnnimporttorch.optimasoptimfrommatplotlibimportpyplotasplt#数量num_time_steps=50#输入的维度input_size=1#隐藏层大小hidden_size=16#输出的维......
  • 个人所得税问题
     分析:设计一个结构体,;里面陈放结构体的征税起点,征税终点,征税率。定义一个结构体数组,将各个范围的征税格式存入该数组。定义一个函数calculate来计算个人所得税#include<stdio.h>#definetaxbase3500/*定义结构体*/typedefstruct{longstart;longend;doubletaxr......
  • 兔子产子问题
    问题描述有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总数为多少?代码如下#include<iostream>usingnamespacestd;intmain(){ longintfib1=1,fib2=1; longfib; cout<<f......
  • C语言函数(交换数值问题)
    实现交换a,b的数值:直接法:#include<stdio.h>intmain(){inta=10,b=20,temp=0;printf("a=%db=%d\n",a,b);temp=a;a=b;b=temp;printf("a=%db=%d\n",a,b);}输出为:2010函数法:#include<stdio.h>intmain(){inta=10;intb=20;//交换函数s......
  • 如何解决Gridea部分主题不渲染Katex的问题
    很多好看的主题因为对象不是信息学,所以忽视了公式,即\(\LaTeX\)。导致,如果你想渲染一个\(n\),结果成了nn这个简单,导入文件即可。找到主题文件夹,打开templates->post.ejs。添加以下这行代码:<linkrel="stylesheet"`href="https://cdn.jsdelivr.net/npm/[email protected]/......
  • redis删除数据后内存释放问题
    这不是Redis本身的问题,Redis本身确实已经调用free释放这些内存。这应该是使用的底层C运行时的问题。就glibc来说,在分配大于128k的内存时使用mmap,而使用brk/sbrk在heap中分配小内存。通过mmap申请的内存在调用free后能马上返还给系统,而heap中的内存就不一定,除非释放的内存是heap中......
  • esp-idf_关闭调度产生复位问题
    esp-idf里面关闭freeRtos之后产生的复位问题esp-idf里面需要使用的vTaskSuspendAll吗?一般是不需要的,根据esp官方的回答,esp-idf的大多数都是可重入函数。此外,esp-idf中的大多数API都是可重入的;您根本不应该使用vTaskSuspendAll。(如果你认为无论如何都需要使用......
  • 【踩坑】.NET异步方法不标记async,Task<int> 返回值 return default问题
    ​        在.NET中,返回类型为 Task<T> 的方法并不一定要标记为 async。这是因为 async 关键字只是用来告诉编译器该方法中包含异步操作,并且可以使用 await 和其他异步特性(如 Task.WhenAll)来等待异步操作完成。如果一个方法中没有使用 await 或者其他异步特性......
  • ***通俗易懂【动态规划】01背包问题
    问题描述有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?为方便讲解和理解,下面讲述的例子均先用具体的数字代入,即:eg:number=4,capacity=8i(物品编号)1234w(体积)2345v(价值)3456 总体思路根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条......