之前的笔记搬运
友元函数
如果类A中的函数要访问类B中的私有成员,那么类A中该函数要是类B的友元函数。具体来说:
- 为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。
实际上具体大概有下面两种情况需要使用友元函数:
1 | 1. 运算符重载的某些场合需要使用友元。 |
友元函数的优缺点
1 | 优点:能够提高效率,表达简单、清晰。 |
因为友元函数没有this指针,则参数要有三种情况:
1 | 1 要访问非static成员时,需要对象做参数; |
友元函数的语法说明:
声明: friend + 普通函数声明;
声明位置: 类的内部, 没有公私属性的限制;
实现位置: 可以在类外或类中;
1 | 类内部声明, 外部实现: |
除了把全局函数定义成友元属性外, 还可以把类成员函数和类定义成友元;
友元类成员函数声明格式: friend void B::fun();
友元类声明格式: friend class B;
还有值得一提是, 定义友元类的时候, 编译不会去检查这个类有没有实现,
都会编译通过, 而类成员函数, 和全局函数就不可以;
友元属性是不可以被继承的, 就像父亲的朋友未必是儿子的朋友;
如: 有A B C三个类, A是B的友元类, C继承了B, 但是A不是C的友元类;
1 | **总结**: |