一个常规的成员函数声明描述了三件在逻辑上互不相同的事情:
1-该函数能访问类声明的私用部分;
2-该函数位于类的作用域之中;
3-该函数必须经由一个对象去激活(有一个This指针)。
1》如果将一个成员函数声明为友元函数之后,该函数就只会有第一种性质,
2》友元函数不受类中的访问权限关键字限制,私有、公有、等保护,放在哪结果都一样。
3》某类的友元函数的作用域并非该类作用域。如果该友元函数就是另一类的成员函数,则其作用域为另一类的作用域,否则与一般函数相同。
#include<iostream>
using namespace std;
class Test
{
friend void Show(Test &);
public:
Test(int d=0):data(d)
{}
public:
//void Fun(Test *const this)
void Fun()
{
cout<<"data="<<data<<endl;
}
public:
int GetData()
{
return data;
}
private:
int data;
};
//友元是为了方便我们访问其私有成员而产生。
void Show(Test &t)//将friend 声明在类里面,在外面再不需要用friend;
{
cout<<"this is show()"<<endl;
cout<<"t.data="<<t.data<<endl;//在这块将函数声明成其友元函数之后,私有成员可以被直接访问
}
void main()
{
Test t(100);
t.Fun();
Show(t);
}