最近几天看了些老谢写的C++ Socket服务方面的代码,写得很好,但有一点不好的是,几乎没有任何注释,你会看得懂不?哈哈,很蛋痛~,好吧转入今日的正题----友元。
学到java,php肯定是不知道什么是友元的,我也是学了C++才知道,所谓友元,就是友好的类,如同自己一样,可以想到,是不是可以访问它的私有方法呢,答案是可以的。
下面是描述:
在某些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍然阻止一般的访问, 这是很方便做到的。
友元机制允许一个类将对其非仅有成员的访问权授予指定的函数或类。友元的声明以关键字friend开始。它只能出现在类定义的内部。友元的声明可以出现在类中的任何地方:友元不是授予友元关系的那个类成员,所以它们不受其声明出现部分的访问控制影响。
还是不太好理解,看傻例子吧:
class Screen {
friend class Window_Mgr;
private:
int height;
}
Window_Mgr& Window_Mgr::relocate(Screen::index r, Screen& s){
s.heigh +=r;
}
如果不在Screen中定义有友元Window_Mgr,则会报错。
现在稍微有点点理解了
在老谢的例子中,我看见这样一个例子:
class A {
friend class B;
}
class B {
friend class A;
}
这样写的话,那这俩个类就成为好基友了,是一个不错的技巧。
友元不仅可以是类,还可以是类中的某个方法,这样就只能允许友类的这个方法可以访问私有的方法。如:
class Scren {
// Window_Mgr 要在处之前定义
friend Window_Mgr& Window_Mgr::relocate(Screen::index r, Screen& s));
}
其他我觉得这个种友方法会很少用,能方法这个类的私有成员了,用哪个方法还不是一个样,所以我觉得用处不太。