首页 > 其他分享 >【CPP0049】以Point类及平面基类Plane类为基础设计圆类Circle并实现相关文件操作

【CPP0049】以Point类及平面基类Plane类为基础设计圆类Circle并实现相关文件操作

时间:2023-05-24 20:46:43浏览次数:72  
标签:const Point double void 圆类 坐标 类为 Circle

基于Point类及平面基类Plane类,设计圆类Circle,并为Point类和Circle重载实现<<和>>运算符,main(void)函数实现Point对象和Circle对象的文件读写操作。@

Point类结构说明:

 
Point类的数据成员包括:
①私有数据成员:X坐标x(double型),Y坐标y(double型)。
Point类成员函数包括:
①有参构造函数Point(double, double),其中参数分别为X坐标和Y坐标,默认值均为0。
②公有函数成员void  setX(double)和double getX() const分别返回和设置X坐标。
③公有函数成员void  setY(double)和double getY() const分别返回和设置Y坐标。
④重载运算符<<以实现Point对象的格式输出,输出格式要求:
(<X坐标>,<Y坐标>)
例如:(1.0,2.0)等。
⑤重载运算符>>以实现Point对象的格式输入,输入格式要求:
(<X坐标>,<Y坐标>)
例如:(1.0,2.0)等。
 

###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),其中函数参数包括圆心坐标和半径,圆心调用Point类构造函数进行构造,各参数默认值为0。
②公有函数成员void setR(double)和double getR()const分别返回和设置radius。
③重载double area()const用于计算圆的面积。
④重载double length()const用于计算圆的周长。
⑤重载运算符<<以实现Circle对象的格式输出,输出格式要求:
((<X坐标>,<Y坐标>),<半径>)
例如:((1.0,2.0),3.0)等。
⑥重载运算符>>以实现Circle对象的格式输入,输入格式要求:
((<X坐标>,<Y坐标>),<半径>)
 

###main(void)说明:

 
main(void)的操作顺序描述如下:
①首先已输入的d1、d2来构造Point对象p,并将p用<<写入文本文件s3.txt中。
②再将文本文件s3.txt打开,应用>>操作将里面的数据读入到Point对象p中。
③利用Point对象p的数据设置Circle对象c,设置要求:将c的圆心X坐标设置为p的Y坐标,将c的圆心Y坐标设置为p的X坐标,将c的半径设置为p的Y坐标与X坐标的和。并将设置好的c写入二进制文件b3.dat中。
④再将二进制文件b3.dat打开,将里面的数据读入到Circle对象c中。
⑤最后以c对象为参数调用f函数。
 

###裁判测试程序样例:

 
#include <iostream>
#include <fstream>
using namespace std;
//点类Point
class Point
{
private:
    double x;
    double y;
public:
    Point(double xv=0,double yv=0);/*构造函数*/
    void setX(double xv);          /*设置X坐标*/
    void setY(double yv);          /*设置Y坐标*/
    double getX() const;           /*获取X坐标*/
    double getY() const;           /*获取Y坐标*/
    friend ostream & operator << (ostream &out, const Point &p); //运算符<<重载
    friend istream & operator >> (istream &in, Point &p); //运算符>>重载
};
class Plane /*平面图形基类*/
{
public:
    virtual double length()const=0;/*周长*/
    virtual double area()const=0;  /*面积*/
};
//圆类Circle
class Circle:public Point,public Plane
{
private:
    double radius;
protected:
    static const double PI;
public:
    Circle(double xv=0,double yv=0,double r=0);/*构造函数*/
    void setR(double r);                       /*设置半径*/
    double getR() const;                       /*获取半径*/
    double area()const;                        /*面积*/
    double length()const;                      /*周长*/
    friend ostream & operator << (ostream &out, const Circle &c); //运算符<<重载
    friend istream & operator >> (istream &in, Circle &c); //运算符>>重载
};

/*请在这里填写第一部分答案*/

void f(Plane  const &p)
{
    cout<<p.area()<<endl;
    cout<<p.length()<<endl;
}
//主函数
int main(void)
{
    double d1,d2;
    cin>>d1>>d2;
    Point p(d1,d2);
    Circle c;
    
/*请在这里填写第二部分答案*/

    f(c);
    return 0;
}
 

###输入样例:

1.0 2.1
 

###输出样例:

30.1907
19.4779
 代码实现:

#include <iostream>

#include <fstream>

using namespace std;

//点类Point

class Point

{

private:

double x;

double y;

public:

Point(double xv=0,double yv=0);/\*构造函数\*/

void setX(double xv);          /\*设置X坐标\*/

void setY(double yv);          /\*设置Y坐标\*/

double getX() const;           /\*获取X坐标\*/

double getY() const;           /\*获取Y坐标\*/

friend ostream & operator << (ostream &out, const Point &p); //运算符<<重载

friend istream & operator >> (istream &in, Point &p); //运算符>>重载

};

class Plane /*平面图形基类*/

{

public:

virtual double length()const=0;/\*周长\*/

virtual double area()const=0;  /\*面积\*/

};

//圆类Circle

class Circle:public Point,public Plane

{

private:

double radius;

protected:

static constexpr double PI=3.14159;

public:

Circle(double xv=0,double yv=0,double r=0);/\*构造函数\*/

void setR(double r);                       /\*设置半径\*/

double getR() const;                       /\*获取半径\*/

double area()const;                        /\*面积\*/

double length()const;                      /\*周长\*/

friend ostream & operator << (ostream &out, const Circle &c); //运算符<<重载

friend istream & operator >> (istream &in, Circle &c); //运算符>>重载

};

/*请在这里填写第一部分答案*/

Point::Point(double xv,double yv)

{

x=xv;

y=yv;

}

void Point::setX(double xv)

{

x=xv;

}

void Point::setY(double yv)

{

y=yv;

}

double Point::getX() const

{

return x;

}

double Point::getY() const

{

return y;

}

ostream & operator<<(ostream &out,const Point &p)

{

out<<"("<<p.x<<","<<p.y<<")";

return out;

}

istream & operator >> (istream& in,Point &p)

{

char ch;

in>>ch>>p.x>>ch>>p.y>>ch;

return in;

}

Circle::Circle(double xv,double yv,double r):Point(xv,yv)

{

radius=r;

}

void Circle::setR(double r)

{

radius=r;

}

double Circle::getR() const

{

return radius;

}

double Circle::area() const

{

return PI\*radius\*radius;

}

double Circle::length() const

{

return 2\*PI\*radius;

}

ostream & operator<<(ostream &out,Circle &c)

{

out<<"(("<<c.getX()<<","<<c.getY()<<")"<<","<<c.getR()<<")";

return out;

}

istream & operator>>(istream &in,Circle &c)

{

char ch;

double xv,yv,r;

in>>ch>>ch>>xv>>ch>>yv>>ch>>r>>ch;

return in;

}

void f(Plane const &p)

{

cout<<p.area()<<endl;

cout<<p.length()<<endl;

}

//主函数

int main(void)

{

double d1,d2;

cin>>d1>>d2;

Point p(d1,d2);

//Circle c;

/*请在这里填写第二部分答案*/

ofstream ofs;

ofs.open("s3.txt",ios::out);

ofs<<p;

ofs.close();

ifstream ifs;

ifs.open("s3.txt",ios::in);

ifs>>p;

ifs.close();

Circle c(p.getY(),p.getX(),p.getX()+p.getY());

ofstream ofs1("b3.dat",ios::out|ios::binary);

ofs1.write(reinterpret_cast<char *>(&c),sizeof(c));

ofs1.close();

ifstream ifs1("b3.dat",ios::in|ios::binary);

ifs1.read(reinterpret_cast<char *>(&c),sizeof(c));

ifs1.close();

f(c);

return 0;

}

标签:const,Point,double,void,圆类,坐标,类为,Circle
From: https://www.cnblogs.com/qian-heng/p/17429432.html

相关文章

  • 以圆类Circle及立体图形类Solid为基础设计圆锥类Cone
    以点类Point及平面图形类Plane为基类公有派生圆类Circle,再以圆类Circle及立体图形类Solid为基类公有派生圆锥类Cone,main(void)函数完成对圆锥类Cone的测试。Point类结构说明: Point类的数据成员包括:①私有数据成员:X坐标x(double型),Y坐标y(double型)。Point类成员函数包括:①......
  • 以圆类Circle及立体图形类Solid为基础设计圆柱类Cylinder
    以点类Point及平面图形类Plane为基类公有派生圆类Circle,再以圆类Circle及立体图形类Solid为基类公有派生圆柱类Cylinder,main(void)函数完成对圆柱类Cylinder的测试。Point类结构说明: Point类的数据成员包括:①私有数据成员:X坐标x(double型),Y坐标y(double型)。Point类成员函数......
  • QSharedPointer创建导致内存泄漏,以及析构异常的问题
    1,下面的代码导致了内存泄漏autoitem=QSharedPointer(newMyClass(),&QObject::deleteLater)2,去掉了自定义析构后,内存泄漏问题解除,但是导致了新的问题,autoitem=QSharedPointer<MyClass>(newMyClass())在item析构时出现了析构错误:QCoreApplication::sendEvent:“cann......
  • APP启动异常崩溃--pointer being freed was not allocated *** set a breakpoint in m
    一、问题场景APP启动异常崩溃BlockChainStep(1332,0x7000057ad000)malloc:*errorforobject0x600000008300:pointerbeingfreedwasnotallocated*setabreakpointinmalloc_error_breaktodebug二、崩溃原因在Xcode8中,如果你的图片资源文件里有16位图或者图片显示模......
  • Sep 2022-Prioritized Training on Points that are Learnable, Worth Learning, and
    摘要:对网络规模的数据进行训练可能需要数月时间。但大多数计算和时间都浪费在已经学习或无法学习的冗余和噪声点上。为加速训练,本文提出了ReducibleHoldoutLossSelection(RHOLOSS),一种简单但有原则的技术,近似地选择那些最能减少模型泛化损失的点进行训练。因此,rho损失缓解了现......
  • cpp: point
      intarr[3][4]={{14,2,3,14},{14,5,6,7},{18,9,10,11}}; int*p; p=arr[0]; for(inti=0;i<sizeof(arr)/sizeof(int);i++) { cout<<"\t"<<&arr[i]<<endl; //p=arr[i]; cout<<*p++<<......
  • EndpointController更新endpoint
    因kcm异常而没有更新endpoint停止kube-controller-manager删除Podcoredns后endpoint没有更新kube-proxy没有更新svckube-dns恢复kcm后更新endpoint启动kube-controller-manager后,去掉了异常corednsPodIPpkg/controller/endpoint/endpoints_controller.gosyncService......
  • 以圆类Circle为基础设计球类Sphere
    以点类Point为基类公有派生圆类Circle,并以圆类Circle为基类公有派生球类Sphere,main(void)函数完成对其的测试。Point类结构说明:Point类的数据成员包括:①私有数据成员:X坐标x(double型),Y坐标y(double型)。Point类成员函数包括:①有参构造函数Point(double,double)和拷贝构造函......
  • kube-proxy修改日志级别并观察endpoint变化
    k8sv1.15.0修改日志级别keditdskube-proxy-nkube-system增加kube-system命名空间下corednsPodkgetendpointskube-dns-nkube-system-oyaml持续输出kube-proxy日志dockerlogs-f`dockerps|grepkube-proxy|grep-vpause|awk'{print$1}'`pkg/prox......
  • 以点类Point及平面图形类Plane为基础设计三角形类Triangle
    以平面图形类Plane为基类公有派生三角形类Triangle,main(void)函数完成对其的测试。Point类结构说明: Point类的数据成员包括:①私有数据成员:X坐标x(double型),Y坐标y(double型)。Point类成员函数包括:①有参构造函数Point(double,double)和拷贝构造函数Point(constPoint&)......