在 C++ 中,友元函数是指在一个类的声明或定义中声明的非成员函数,该函数被授予了访问该类的私有成员和保护成员的权限。这意味着友元函数可以访问该类中的私有和保护成员,尽管它不是类的成员函数。
友元函数的存在是为了提供一种特殊的访问控制机制,允许一些外部函数访问某个类的私有成员,但同时又不是类的成员函数。这在某些情况下可能很有用,例如在实现一些操作符重载时,需要对类的私有成员进行操作,但又不想将操作符重载函数直接定义为类的成员函数。
友元函数的声明需要在类的声明或定义中使用 friend
关键字进行声明。这样一来,友元函数就能够在实现细节中访问该类的私有和保护成员。
#include <iostream>
class Complex {
private:
double real;
double imag;
public:
Complex(double r = 0, double i = 0) : real(r), imag(i) {}
// 声明友元函数
friend std::ostream& operator<<(std::ostream& out, const Complex& c);
// getter 函数
double getReal() const { return real; }
double getImag() const { return imag; }
};
// 定义友元函数
std::ostream& operator<<(std::ostream& out, const Complex& c) {
out << "(" << c.getReal() << ", " << c.getImag() << "i)";
return out;
}
int main() {
Complex c1(3.5, 2.5);
Complex c2(1.2, 4.8);
// 使用 << 运算符打印复数对象
std::cout << "c1 = " << c1 << std::endl;
std::cout << "c2 = " << c2 << std::endl;
return 0;
}