运算符重载为非成员函数
时间: 2023-08-21 16:09:09 浏览: 76
运算符重载可以在类内部或者类外部进行实现。在类外部实现运算符重载时,需要将其定义为非成员函数,并且需要在函数前加上关键字 `friend`,以便访问类的私有成员。
以重载加法运算符为例,可以在类外部定义如下的非成员函数:
```
class MyClass {
public:
int value;
MyClass operator+(const MyClass& other);
};
MyClass MyClass::operator+(const MyClass& other) {
MyClass result;
result.value = this->value + other.value;
return result;
}
friend MyClass operator+(const MyClass& a, const MyClass& b) {
MyClass result;
result.value = a.value + b.value;
return result;
}
```
这里我们定义了一个名为 `operator+` 的非成员函数,并在函数前加上了 `friend` 关键字。这样一来,该函数就能够访问 `MyClass` 类的私有成员了。
在 `operator+` 函数内部,我们创建了一个新的 `MyClass` 对象 `result`,并将其值初始化为两个参数对象的值之和。最后,该函数返回 `result` 对象。
这样一来,我们就可以像下面这样使用重载后的加法运算符:
```
MyClass a, b, c;
a.value = 1;
b.value = 2;
c = a + b; // 使用重载后的加法运算符
```
阅读全文