在C++中,friend
函数是一种特殊的函数,它被允许访问一个类的私有(private)和保护(protected)成员。尽管 friend
函数不是类的成员函数,它却能够像类的成员函数一样访问类的所有成员。
使用 friend
函数主要有两个目的:
-
实现操作符重载:有时候我们需要对类进行操作符重载(比如操作符
<<
),而这些操作符需要访问类的私有数据。通过将这些操作符函数声明为类的友元,可以使它们访问类的私有和保护成员。 -
提供类之间的紧密合作功能:当两个或多个类需要紧密合作并访问对方的内部状态时,可以使用
friend
函数或类来实现这种关系。
例子
考虑一个简单的类 Box
,它有私有成员 width
。我们可以创建一个 friend
函数来访问这个私有成员。
cpp#include <iostream> class Box { private: double width; public: Box(double wid) : width(wid) {} // friend function friend void printWidth(Box box); }; void printWidth(Box box) { // Access private member from the friend function std::cout << "Width of box: " << box.width << std::endl; } int main() { Box box(10); printWidth(box); return 0; }
在这个例子中,printWidth
是一个 friend
函数,它能够访问 Box
类的私有成员 width
。这在没有 friend
关键字的情况下是不可能的,因为通常情况下,非成员函数无法访问类的私有或保护成员。
总之,friend
关键字提供了一种灵活的方式来允许某些外部函数或类访问类的内部成员,同时又不破坏封装的原则。
2024年7月19日 17:48 回复