在C++中,要定义一个运算符重载函数,需要满足以下条件:
- 运算符重载函数必须是类的成员函数或者全局函数。
- 运算符重载函数的返回类型必须是运算符所对应的返回类型。例如,如果重载的是加法运算符
+
,那么返回类型应该是参与运算的对象的类型。 - 运算符重载函数的参数列表应该与运算符所对应的参数列表相同。例如,如果重载的是二元加法运算符
+
,那么参数列表应该包含两个参与运算的对象。 - 运算符重载函数不能改变运算符的行为。运算符重载应该只是改变了运算符的语法形式,而不是其语义。
- 运算符重载函数必须是const成员函数,除非该运算符是赋值运算符
=
。因为const成员函数不能修改对象的状态,而赋值运算符需要修改对象的状态。 - 对于某些运算符,如赋值运算符
=
、复合赋值运算符(如+=
、-=
等)和比较运算符(如==
、!=
等),还需要满足一些额外的要求。例如,赋值运算符重载函数必须返回对当前对象的引用,复合赋值运算符重载函数必须返回一个与参与运算的对象相同类型的对象,比较运算符重载函数必须返回一个布尔值。
以下是一些常见的运算符重载函数的示例:
class MyClass { public: int x, y; MyClass operator+(const MyClass& other) const { return MyClass{x + other.x, y + other.y}; } MyClass& operator+=(const MyClass& other) { x += other.x; y += other.y; return *this; } bool operator==(const MyClass& other) const { return x == other.x && y == other.y; } };
在这个示例中,我们重载了加法运算符+
、复合赋值运算符+=
和比较运算符==
。这些重载函数都满足上述条件。