1.友元函数的基本介绍
(1)友元函数是可以直接访问类的私有成员的非成员函数(只有类的成员函数才能访问类中的私有成员)。
友元函数是定义在类外的普通函数,不属于任何类,但需要在类的定义中加以声明,声明时只需在友元函数的名称前加上关键字friend 。
定义格式:friend+返回类型+函数名+参数列表
例如:friend void Show(inta);
(2)在类外实现时不用类的作用域标识符::来指示哪一个类,只有成员函数才用::作用域符号。
(3)调用时而友元函数和普通函数的调用方法是一样的,不需要对象和指针来调用。
(4)举例:
#include
using namespacestd;
class Count{
friend void setx(Count&,int);
public:
Count():x(0)
{
//empty body
}
void print()
{
cout<<x<<endl;
}
private:
intx;
};
void setx(Count &c,intval)
{
c.x=val;
}
intmain()
{
Countcounter;
cout<<"输出 x 的值 ";
counter.print();
setx(counter,8);
cout<<"输出 x的值 ";
counter.print();
}
2.为什么要使用友元函数?
在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了
使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。
3.友元函数和普通函数的区别
(1) 成员函数有this指针,而友元函数没有this指针。
(2)友元关系不能被继承。