没有友元之前,一个类是不能直接访问其它类的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.何时使用类的非成员函数即友元函数
当我们对类的两个以上对象进行操作时,如关系运算,输入>>,输出<<,请选用友元函数