1.友元函数的一般形式:
friend <返回类型> <函数名>(<参数列表>);
class CObject { public: friend void func(); //友元函数 friend class CSthing;
protected: int b;
provate:
int a; };
class CSthing
{
public:
void test()
{
printf("%d\n",p->a);
}
}
void func( CObject *p)
{
printf("%d\n",p->a);
}
2.注意点:
- 类中通过使用关键字friend 来修饰友元函数,但该函数并不是任何类的成员函数,其声明可以放在类的私有部分,也可放在共有部分。友元函数的定义在类体外实现,不需要加类限定。
- 一个类中的成员函数可以是另外一个类的友元函数,而且一个函数可以是多个类友元函数。
- 友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用。
- 友元函数在调用上同一般函数一样,不必通过对对象进行引用。
- 可以把类声明为友元,但是“朋友”只能是单向的,被声明为朋友的类csthing,可以不受protected,protected的限制访问CObject各成员;