没有友元之前,一个类是不能直接访问其它类的private成员的 引进友元机制是允许一个类的private,protected成员的访问权授予给指定的其它函数和其它类 2.定义 定义友元的关键字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; } 3.基类与派生类 友元关系不能被继承,基类的友元对派生类的成员没有任何访问权限 也就是说如果基类有友类函数和友元类,它们能访问基类任何成员,而不能访问由这个基类继承的派生类的任何成员 4.设计指导 类的友元函数又叫做类的非成员函数 1.何时使用类的成员函数 当我们对类自身对象进行操作时,操作如赋值=,下标(),调用(),自增++,自减-- 操作的返回结果也在类的自身对象,就直接选择用成员方法实现 2.何时使用类的非成员函数即友元函数 当我们对类的两个以上对象进行操作时,如关系运算,输入>>,输出<<,请选用友元函数
|