C++ 面向对象编程:圆类设计及运算符重载

本示例展示了如何使用 C++ 面向对象编程,设计一个圆类(Circle),并继承点类(Point)和平面图形基类(Plane)。同时,对 << 和 >> 运算符进行了重载,以方便 Point 和 Circle 对象的输入输出操作。

代码示例

#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 类的实现

##### Point 类实现

```c++
// Point 类构造函数
Point::Point(double xv, double yv)
{
    x = xv;
    y = yv;
}

// Point 类 setX() 和 setY() 函数
void Point::setX(double xv)
{
    x = xv;
}

void Point::setY(double yv)
{
    y = yv;
}

// Point 类 getX() 和 getY() 函数
double Point::getX() const
{
    return x;
}

double Point::getY() const
{
    return y;
}

// Point 类 << 运算符重载
ostream & operator << (ostream &out, const Point &p)
{
    out << '(' << p.x << ',' << p.y << ')';
    return out;
}

// Point 类 >> 运算符重载
istream & operator >> (istream &in, Point &p)
{
    char c;
    in >> c >> p.x >> c >> p.y >> c;
    return in;
}
Circle 类实现
// Circle 类静态常量 PI
const double Circle::PI = 3.1415926;

// Circle 类构造函数
Circle::Circle(double xv, double yv, double r):Point(xv,yv)
{
    radius = r;
}

// Circle 类 setR() 函数
void Circle::setR(double r)
{
    radius = r;
}

// Circle 类 getR() 函数
 double Circle::getR() const
{
    return radius;
}

// Circle 类 area() 函数
double Circle::area() const
{
    return PI * radius * radius;
}

// Circle 类 length() 函数
double Circle::length() const
{
    return 2 * PI * radius;
}

// Circle 类 << 运算符重载
ostream & operator << (ostream &out, const Circle &c)
{
    out << "圆心坐标:" << static_cast<const Point &>(c) << " 半径:" << c.radius << " 面积:" << c.area() << " 周长:" << c.length();
    return out;
}

// Circle 类 >> 运算符重载
istream & operator >> (istream &in, Circle &c)
{
    in >> static_cast<Point &>(c) >> c.radius;
    return in;
}

第二部分:main() 函数实现

int main(void)
{
    double d1,d2;
    cin>>d1>>d2;
    Point p(d1,d2);
    Circle c;
    cin>>c;
    cout<<p<<endl; //输出点对象
    cout<<c<<endl; //输出圆对象
    f(c);
    return 0;
}

注意事项

  • 在 main() 函数中,先输入点的坐标,再输入圆的半径和圆心坐标,可以通过输入流重载实现。
  • 输出点和圆对象可以通过重载输出流运算符实现。
  • 调用 f() 函数时,使用基类指针指向派生类对象,可以体现多态性。

本示例展示了如何使用 C++ 面向对象编程的基本概念,包括类、继承、多态、运算符重载等,并通过一个圆类的设计示例,演示了如何将这些概念应用于实际编程问题。 ``

C++ 面向对象编程:圆类设计及运算符重载

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

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