1. 概念
类的友元函数是被特别授予了访问类的数据成员权限的普通函数。友元函数具有的权限与成员函数相同,在友元函数的定义中可以直接访问类的所有数据成员(包括公有成员函数、公有成员变量、私有成员函数、私有成员变量),甚至改变公有(及私有)成员变量的值。然而,友元函数并不是成员函数,它本质上仍是一个普通函数。
2. 声明、定义和调用友元函数
声明:必须在类定义中列出友元函数的声明,函数声明前必须附加关键字friend。特别注意的是友元函数的声明即可放在private小节也可放在public小节,但无论如何友元函数都是一个公共函数,惯例上是在public小节中声明。
定义和调用:由于友元函数并不是类的成员函数,故友元函数的定义和调用方式与普通函数相同。定义友元函数时,不使用类型限定符,调用友元函数时,不使用圆点操作符。
语法:
class Aclas
{
public:
friend bool friendFunc1(parameters...);
friend int friendFunc2(parameters...);
...
pubic_member_function_declarations.
private:
private_member_function_declarations;
};
int main()
{
bool bRet = friendFunc1(parameter...);
int nRet = friendFunc2(parameter...);
...
return 0;
}
bool frendFunc1(parameter...)
{
definition_statementes
....
return ture;
}
int friendFunc2(parameter...)
{
definition_statementes
....
return 0;
}
3. 使用友元函数的简单规则
一个函数到底是设计成类的成员函数还是友元函数呢?有两个简单的规则:
a. 如果函数执行的任务只涉及一个类的对象,那就设计为成员函数;
b. 如果函数执行的任务涉及两个及以上对象,则使用友元函数。