没有友元之前,一个类是不能直接访问其它类的private成员的 引进友元机制是允许一个类的private,protected成员的访问权授予给指定的其它函数和其它类 1.定义 定义友元的关键字friend 格式: class classname{ ... friend functionname().//声明类的友元函数 friend class othername().//声明类的友元类 }. functionname(){} //定义友元函数代码细节 class othername(){}. //定义友元友元类代码细节 2.1.在类中定义友元函数 代码举例 //friend1.cpp pass with vc 6.0 or dev-c 4.9 #include <.iostream>. class x{ public: x():a(11),b(33){}//构造函数初始化列表 friend void x_friend_f(x&.). friend class use_x. private: int a. int b. }. void x_friend_f(x&. xx)//x的友元函数实现 {std::cout<.<.\"a,b in class x is: \"<.<.xx.a<.<.\",\"<.<.xx.b<.<.std::endl.} int main(){ x demo. x_friend_f(demo). return 0. } .在类中定义友元类 class screen{ public: ... friend class window_msg.//在类中声明一个友元window_msg类 priavte: int height. int width. int index. }. //在另一类window_msg中直接访问screen类的private成员 class window_msg{ public: ... }. //友元类可以直接访问 window_msg&. window_msg::relocate(screen::index r,screen::index c,screen&. s) { s.height =r. s.width =c. return *this. } 2.基类与派生类 友元关系不能被继承,基类的友元对派生类的成员没有任何访问权限 也就是说如果基类有友类函数和友元类,它们能访问基类任何成员,而不能访问由这个基类继承的派生类的任何成员 3.设计指导 类的友元函数又叫做类的非成员函数 1.何时使用类的成员函数 当我们对类自身对象进行操作时,操作如赋值=,下标(),调用(),自增 ,自减-- 操作的返回结果也在类的自身对象,就直接选择用成员方法实现 2.何时使用类的非成员函数即友元函数 当我们对类的两个以上对象进行操作时,如关系运算,输入>.>.,输出<.<.,请选用友元函数。