在C++中,friend
是一个关键字,用于声明一个非成员函数或类可以访问另一个类的私有成员。
例如,我们有一个名为ClassA
的类:
class ClassA {
public:
ClassA(int a) : memberA(a) {}
private:
int memberA;
friend void friendFunction(ClassA obj);
friend class FriendClass;
};
其中,friendFunction
是一个自由函数,它被声明为ClassA
的朋友(即友元函数),FriendClass
是一个类,它被声明为ClassA
的友元类。
这意味着,friendFunction
和FriendClass
都可以直接访问ClassA
的私有成员(memberA
),而不需要通过ClassA
的公有接口来进行访问。
下面是一个例子:
void friendFunction(ClassA obj) {
std::cout << "friendFunction can access ClassA's memberA: " << obj.memberA << std::endl;
}
class FriendClass {
public:
void doSomething(ClassA obj) {
std::cout << "FriendClass can access ClassA's memberA: " << obj.memberA << std::endl;
}
};
int main() {
ClassA obj(42);
friendFunction(obj);
FriendClass f;
f.doSomething(obj);
return 0;
}
在上面的代码中,我们创建了一个ClassA
的对象obj
,并将其传递给friendFunction
和FriendClass
的成员函数doSomething
。这两个函数都可以访问obj
的私有成员memberA
,因为它们被声明为了ClassA
的朋友。
friend
关键字允许我们在不暴露类的私有成员的情况下,让其他非成员函数或类可以访问这些私有成员。但是,使用friend
关键字可能会破坏封装性和抽象性,因此必须谨慎使用。