C++ 面向对象编程:圆类设计与文件读写

本示例展示了如何使用 C++ 面向对象编程设计圆类,并为 Point 类和 Circle 类重载 '<<' 和 '>>' 运算符,实现文件读写操作。

代码结构

代码包含以下类定义和实现:

  1. Point 类:表示二维平面上的点,包含坐标 x 和 y。
  2. Plane 类:表示平面图形的基类,包含计算周长和面积的虚函数。
  3. Circle 类:表示圆,继承自 Point 类和 Plane 类,包含圆心坐标和半径。

类实现

Point 类

#ifndef POINT_H
#define POINT_H
#include <iostream>
using namespace std;
class Point
{
private:
    double x;
    double y;
public:
    Point(double xv=0,double yv=0):x(xv),y(yv){}/*构造函数*/
    void setX(double xv){x=xv;}          /*设置X坐标*/
    void setY(double yv){y=yv;}          /*设置Y坐标*/
    double getX() const{return x;}           /*获取X坐标*/
    double getY() const{return y;}           /*获取Y坐标*/
    friend ostream & operator << (ostream &out, const Point &p); //运算符<<重载
    friend istream & operator >> (istream &in, Point &p); //运算符>>重载
};
#endif

#include 'Point.h'
ostream & operator << (ostream &out, const Point &p) //运算符<<重载
{
    out<<p.x<<' '<<p.y;
    return out;
}
istream & operator >> (istream &in, Point &p) //运算符>>重载
{
    in>>p.x>>p.y;
    return in;
}

Plane 类

class Plane /*平面图形基类*/
{
public:
    virtual double length()const=0;/*周长*/
    virtual double area()const=0;  /*面积*/
};

Circle 类

#ifndef CIRCLE_H
#define CIRCLE_H
#include <iostream>
#include <cmath>
#include 'Point.h'
using namespace std;
const double PI=3.14159265358979323846;
class Circle:public Point,public Plane
{
private:
    double radius;
public:
    Circle(double xv=0,double yv=0,double r=0):Point(xv,yv),radius(r){}/*构造函数*/
    void setR(double r){radius=r;}                       /*设置半径*/
    double getR() const{return radius;}                       /*获取半径*/
    double area()const{return PI*radius*radius;}             /*面积*/
    double length()const{return 2*PI*radius;}                 /*周长*/
    friend ostream & operator << (ostream &out, const Circle &c); //运算符<<重载
    friend istream & operator >> (istream &in, Circle &c); //运算符>>重载
};
#endif

#include 'Circle.h'
ostream & operator << (ostream &out, const Circle &c) //运算符<<重载
{
    out<<c.getX()<<' '<<c.getY()<<' '<<c.radius;
    return out;
}
istream & operator >> (istream &in, Circle &c) //运算符>>重载
{
    double x,y,r;
    in>>x>>y>>r;
    c.setX(x);
    c.setY(y);
    c.setR(r);
    return in;
}

主函数实现

#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

说明

  • 主函数中,首先读取点的坐标,创建一个 Point 对象。
  • 然后,创建一个 Circle 对象,并读取圆心坐标和半径。
  • 最后,调用 f 函数,输出圆的面积和周长。

总结

本示例展示了如何使用 C++ 面向对象编程设计圆类,并通过运算符重载实现文件读写操作。您可以根据需要修改代码,实现其他功能。

C++ 面向对象编程:圆类设计与文件读写

原文地址: https://www.cveoy.top/t/topic/okCi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录