在C++中,有时候需要访问类的私有成员,但是这些成员只能在类内部访问,对于类外部的函数和类来说是无法访问的。在这种情况下,可以使用友元函数和友元类来解决这个问题。
友元函数是指在类定义内部声明的非成员函数,该函数可以访问类的私有成员和保护成员。为了使函数成为类的友元函数,需要在类的定义内部使用friend关键字进行声明。这个友元函数并不属于类的成员函数,但它能够访问该类的所有私有成员和保护成员。友元函数可以是全局函数,也可以是其他类的成员函数。
例如,假设有一个类A,其中有一个私有变量x和一个友元函数f。下面是如何定义一个友元函数:
class A{
private:
int x;
friend void f(A&);
};
在这个例子中,函数f被声明为A的友元函数。这意味着函数f可以访问A的私有成员x。
友元类是指一个类能够访问另一个类的私有成员和保护成员。为了使类成为另一个类的友元类,需要在该类的定义中使用friend关键字声明。这个友元类能够访问另一个类的私有成员和保护成员,但是另一个类并不能访问该友元类的私有成员和保护成员。
例如,假设有两个类A和B,其中B是A的友元类。下面是如何定义一个友元类:
class A{
private:
int x;
friend class B;
};
class B{
public:
void function(A& a){
a.x = 5;
}
};
在这个例子中,类B被声明为A的友元类。这意味着类B可以访问A的私有成员x。
需要注意的是,友元函数和友元类破坏了类的封装性。因此,应该谨慎使用友元函数和友元类,只在必要的时候使用。