友元函数实现运算符重载
时间: 2023-06-16 11:07:53 浏览: 90
在 C++ 中,运算符重载可以通过成员函数或者友元函数来实现。如果我们想要实现一个非成员函数的运算符重载,就需要使用友元函数。
友元函数是在类定义中声明的非成员函数,它可以访问该类的私有成员和保护成员。通过将运算符重载函数声明为该类的友元函数,我们可以在运算符重载函数中直接访问该类的私有成员和保护成员。
下面是一个例子,演示如何通过友元函数实现运算符重载:
```c++
#include <iostream>
class Complex {
public:
Complex(double r = 0, double i = 0) : real(r), imag(i) {}
friend Complex operator+(const Complex& c1, const Complex& c2);
friend std::ostream& operator<<(std::ostream& os, const Complex& c);
private:
double real;
double imag;
};
Complex operator+(const Complex& c1, const Complex& c2) {
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
std::ostream& operator<<(std::ostream& os, const Complex& c) {
os << c.real << "+" << c.imag << "i";
return os;
}
int main() {
Complex c1(1, 2);
Complex c2(2, 3);
Complex c3 = c1 + c2;
std::cout << c3 << std::endl;
return 0;
}
```
在上面的例子中,我们定义了一个 `Complex` 类,并通过友元函数实现了 `operator+` 运算符的重载。我们还实现了一个重载了输出运算符 `<<` 的友元函数,以便于输出该类的对象。
在 `operator+` 函数中,我们直接访问了 `Complex` 类的私有成员 `real` 和 `imag`,这是因为该函数是 `Complex` 类的友元函数,可以直接访问该类的私有成员。
最后,在 `main()` 函数中,我们测试了 `operator+` 运算符的重载,并输出了结果。