C++ 面向对象编程:圆类设计与运算符重载
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 类的输入输出操作。这不仅展示了面向对象编程的优势,也展现了运算符重载在提高代码可读性和可维护性方面的价值。
原文地址: https://www.cveoy.top/t/topic/ok3e 著作权归作者所有。请勿转载和采集!