如何以非成员函数的形式重载运算符
时间: 2024-01-14 08:46:41 浏览: 58
可以使用友元函数来以非成员函数的形式重载运算符。友元函数是在类外部定义的函数,但可以访问类中的私有成员。为了将一个函数声明为友元函数,需要在类中声明该函数,并在函数前加上 `friend` 关键字。
例如,如果要以非成员函数的形式重载 `+` 运算符,可以这样实现:
```c++
class MyClass {
public:
MyClass operator+(const MyClass& other) const; // 类中声明该运算符函数为成员函数
int getValue() const { return value; }
private:
int value;
friend MyClass operator+(const MyClass& a, const MyClass& b); // 友元函数声明
};
MyClass MyClass::operator+(const MyClass& other) const {
MyClass result;
result.value = value + other.value;
return result;
}
MyClass operator+(const MyClass& a, const MyClass& b) {
MyClass result;
result.value = a.value + b.value;
return result;
}
```
在上述示例中,`operator+` 函数被声明为 `MyClass` 类的成员函数,而 `operator+` 友元函数被声明为类的友元函数。这使得我们可以通过 `MyClass` 类的对象调用成员函数 `operator+`,也可以通过两个 `MyClass` 类型的对象调用友元函数 `operator+`。
阅读全文