C++ 类的友元
友元是一个不属于类成员的函数,但是它由权访问该类的私有成员。
私有成员对于类外部的所有程序部分而言都是隐藏的,访问它们需要调用一个公共成员函数,但有时也可能会需要创建该规则的一项例外。友元函数是一个不属于类成员的函数,但它可以访问该类的私有成员。换句话说,友元函数被视为好像是该类的一个成员。友元函数可以是常规的独立函数,也可以是其他类的成员。实际上,整个类都可以声明为另一个类的友元。
为了使一个函数或类成为另一个类的友元,它必须由授予它访问权限的类来说明。类保留了他们的朋友的“名单”,只有名字出现在列表中的外部函数或类才被授予访问权限。通过将关键字friend放置在函数的原型之前,即可将函数声明为友元。以下是其一般格式:
friend <return type> <function name> (<parameter type list>);
在Budget类的以下声明中,另一个类的Aux的addBudget函数已声明为友元:
class Budget
{
private:
double divBudget;
public :
friend void Aux::addBudget(double); //友元
}
addBudget(double)函数的声明和定义在Aux类中。
如前所述,可以使整个类成为另一个类的友元。Budget类可以通过以下声明使Aux类成为友元:
friend class Aux;
但是,这可能并不是一个好主意,因为这将导致Aux的每个成员函数(包括稍后可能添加的函数)都可以访问Budget的私有成员。所以,最好的做法是只声明那些必须有权访问类的私有成员的函数作为友元。