在C++中,运算符重载是一种特殊的函数,它允许程序员重新定义或重载大部分内置运算符,以便它们可以用于用户自定义的数据类型。通过运算符重载,可以使自定义类型的使用更加直观和自然。
不是所有运算符都可以被重载:
.
(成员访问)、.*
(成员指针访问)、?:
(条件)、.
*(成员指针)、sizeof
和 ?:
(条件)运算符不能被重载。
重载的运算符至少必须有一个操作数是用户自定义类型
这意味着不能改变运算符对内置类型操作数的行为
不能创建新的运算符
只能重载已经存在的运算符
重载的运算符可以是成员函数或全局函数
如果作为成员函数,第一个参数隐式地是*this
对象;如果作为全局函数,需要显式地指定所有参数
参数数量
运算符函数的参数数量等于运算符的操作数数量减一(因为至少有一个操作数是*this
或第一个显式参数)
举例:
#include <iostream>
class Point {
public:
int x, y;
Point(int x = 0, int y = 0) : x(x), y(y) {}
// 重载+运算符,使其可以用于两个Point对象
Point operator+(const Point& other) const {
return Point(this->x + other.x, this->y + other.y);
}
// 输出Point对象
void print() const {
std::cout << "(" << x << ", " << y << ")" << std::endl;
}
};
int main() {
Point p1(1, 2);
Point p2(3, 4);
Point p3 = p1 + p2; // 使用重载的+运算符
p3.print(); // 输出(4, 6)
return 0;
}
我们定义了一个Point
类,并为其重载了+
运算符。这使得我们可以使用+
运算符来相加两个Point
对象,并得到一个新的Point
对象,其坐标是这两个对象坐标的和。