关于c++中友元的总结
在实现类之间的数据共享的时候,减少系统开销,提高效率。
比如:A类要访问B类的成员,那么A要是B类的友元函数,就能实现。即允许类外的函数去访问类内的private成员和proceted成员。
使用友元函数的情况:
1.重载某些运算符的时候。如 输入运算符>> 和输出运算符<<;
2。某两个类要共享数据的时候。
有人赞同使用友元函数,认为这样可以提高效率,使表达更为简单,清晰。
也有人反对这样,认为这样破坏了c++的封装性。
友元函数,没有this指针。调用友元函数的时候可以直接调用,不用通过对象或者指针。
友元函数的几个类型:
1.使用普通函数作为友元函数,使普通函数能够访问类中的成员。
如:
class A{
...
friend void func(){}
...
};
2.友元类
在一个类中的变量部分加入一个friend修饰的类变量。
就能实现加入的类对本类成员的访问。
如:class A{
private:
...
friend class A;
}
当我们定义符合标准库iostream规范的输入或者输出操作符的时候,为什么要定义成友元函数?
我们不能讲该操作符定义为类的成员函数,否则,左操作数只能是该类类型的对象,也就是说它必须是ostream类的成员。然而ostream是标准库的组成部分,我们是不能忘标准库中增加成员的。但是我们又想重载此操作符为我们所用。所以就将它重载为普通函数。但是普通函数又不能实现对类中的成员进行读写,故将其设置为友元函数。
友元函数需要注意的几点:
1.友元关系式不能传递的。
如:A是B的友元,B是C的友元,A和C之间
如果没有友元声明,是没有友元关系的。
2.友元关系是单向的。
3.友元关系不能被继承。