【C++】运算符重载详解
在C++中,运算符重载允许我们重新定义运算符的行为,使其用于自定义数据类型。运算符重载通过创建运算符函数(operator function)来实现,运算符函数是一种特殊的函数,其函数名为operator
后跟所需重载的运算符符号。
运算符重载的基本形式如下:
class MyClass {
public:
// 类成员运算符重载
MyClass operator+(const MyClass& other) const {
// 实现加法操作
}
// 类非成员运算符重载
friend bool operator==(const MyClass& lhs, const MyClass& rhs) {
// 实现等于操作
}
};
成员函数运算符重载有一个隐式的this
参数,而非成员函数运算符重载则不包含这个隐式参数。
运算符重载时,应遵循几个原则:
- 不能创建新的运算符。
- 应选择现有的含义清晰的运算符进行重载。
- 应保持运算符的优先级和结合性。
- 应提供运算符所需的所有参数个数。
下面是一个简单的示例,展示了如何重载加号运算符和等于运算符:
#include <iostream>
class Point {
public:
int x, y;
Point(int x = 0, int y = 0) : x(x), y(y) {}
// 成员函数运算符重载
Point operator+(const Point& other) const {
return Point(x + other.x, y + other.y);
}
// 非成员函数运算符重载
bool operator==(const Point& other) const {
return x == other.x && y == other.y;
}
};
int main() {
Point p1(1, 2);
Point p2(2, 3);
Point p3 = p1 + p2; // 使用重载后的加法运算符
std::cout << "(" << p3.x << ", " << p3.y << ")" << std::endl; // 输出 (3, 5)
if (p1 == p2) {
std::cout << "p1 and p2 are equal." << std::endl; // 输出 p1 and p2 are equal.
}
return 0;
}
在这个例子中,我们定义了一个Point
类,并重载了加法运算符+
和等于运算符==
。我们可以使用这些重载的运算符来操作Point
实例,就像操作内置数据类型一样。
评论已关闭