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

本文将介绍如何使用 C++ 面向对象编程设计圆类,并通过重载运算符 <> 实现 Point 类和 Circle 类的输入输出操作。同时,文章还探讨了 Plane 类作为平面图形的基类,以及 Circle 类继承 Point 类和 Plane 类的设计思路。

Point 类

Point 类代表一个二维平面上的点,其结构如下:

数据成员:

  • 私有数据成员:
    • x (double 型): X 坐标
    • y (double 型): Y 坐标

成员函数:

  • 有参构造函数 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 类,其结构如下:

数据成员:

  • 圆心坐标: 继承自 Point 类。
  • 保护静态数据常量 PI (double 型): 其值为 3.14159。
  • 私有数据成员: radius (double 型): 半径。

成员函数:

  • 有参构造函数 Circle(double, double, double): 初始化圆心坐标和半径,圆心坐标调用 Point 类构造函数进行构造,各参数默认值为 0。
  • 公有成员函数 void setR(double)double getR() const: 设置和获取半径。
  • 重载 double area() const: 计算圆的面积。
  • 重载 double length() const: 计算圆的周长。
  • 重载运算符 <<: 实现 Circle 对象的格式输出,输出格式为 ((<X坐标>,<Y坐标>),<半径>),例如: ((1.0,2.0),3.0)
  • 重载运算符 >>: 实现 Circle 对象的格式输入,输入格式为 ((<X坐标>,<Y坐标>),<半径>),例如: ((1.0,2.0),3.0)

代码示例

// Point 类实现
class Point {
private:
    double x;
    double y;
public:
    Point(double x = 0, double y = 0) : x(x), y(y) {}
    void setX(double x) { this->x = x; }
    double getX() const { return x; }
    void setY(double y) { this->y = y; }
    double getY() const { return y; }
    friend std::ostream& operator<<(std::ostream& os, const Point& p) {
        os << '(' << p.x << ',' << p.y << ')';
        return os;
    }
    friend std::istream& operator>>(std::istream& is, Point& p) {
        is >> p.x >> p.y;
        return is;
    }
};

// Plane 类实现
class Plane {
public:
    virtual double length() const = 0;
    virtual double area() const = 0;
};

// Circle 类实现
class Circle : public Point, public Plane {
protected:
    static const double PI = 3.14159;
private:
    double radius;
public:
    Circle(double x = 0, double y = 0, double radius = 0) : Point(x, y), radius(radius) {}
    void setR(double radius) { this->radius = radius; }
    double getR() const { return radius; }
    double area() const override { return PI * radius * radius; }
    double length() const override { return 2 * PI * radius; }
    friend std::ostream& operator<<(std::ostream& os, const Circle& c) {
        os << '(' << c.getX() << ',' << c.getY() << ')' << ',' << c.radius;
        return os;
    }
    friend std::istream& operator>>(std::istream& is, Circle& c) {
        is >> c.x >> c.y >> c.radius;
        return is;
    }
};

// main 函数示例
int main() {
    Point p1(1.0, 2.0), p2;
    Circle c1(3.0, 4.0, 5.0), c2;

    std::cout << 'p1: ' << p1 << std::endl;
    std::cin >> p2;
    std::cout << 'p2: ' << p2 << std::endl;

    std::cout << 'c1: ' << c1 << std::endl;
    std::cin >> c2;
    std::cout << 'c2: ' << c2 << std::endl;

    return 0;
}

总结

本文通过 C++ 面向对象编程的方式实现了圆类的设计,并通过重载运算符 <> 实现 Point 类和 Circle 类的输入输出操作。这不仅展示了面向对象编程的优势,也展现了运算符重载在提高代码可读性和可维护性方面的价值。

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

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

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