友元函数
extern void F1();
namespace AA{
extern void F2();
extern void F3( int _channel_id);
}
namespace CURRENT{
class ST{
private: // friend
friend void F1(); ' 不可以是: (::F1) '
friend void AA::F2(); ' 不可以是: (::AA) '
friend void AA::F3( int _channel_id);
friend int ABC::Hhhhh(); ' 这也可以 (即使他并不存在), 就类似extern一样, 只是一个声明 '
}
}
class ST{
private:
int a;
};
void f1(){
ST t; t.a;
}
void f2( ST t ){
t.a;
}
下面的f1 和 f2
函数,都是错误的。因为a是private的。
如果你的类,想要指定 “全局的”某个函数f1() f2()
,让这个函数 可以该类的所有变量; 这就是:友元函数
extern void f1();
class ST;
extern void f2(ST);
class ST{
friend void f1();
friend void f2(ST);
}
ST类里的,这2个friend
写法,写在什么作用域private、...
都可以,不影响。
此时,你上面的f1 和 f2
函数,就都是正确的了。
友元类
class ST{
private:
int a = 123;
friend class STT; ' 加上这个后,STT::func()里,才能访问ST的private '
};
class STT{
void func(){
ST t;
t.a;
}
};
STT是ST的友元类,则: STT的所有成员函数,就都可以访问ST的private