友元(突破 private 限制)
友元函数
只要让函数 func 成为类 Men 的友元函数,那么 func 这个函数就能够访问类 Men 的所有成员(成员变量、成员函数),private、protected
总结:
友元函数 func(。。。) 是个函数,通过声明为某个类 Men 的友元函数,它就能访问这个类(Men)的所有成员
,包括 public,protected,private
友元类
可以把其它的类定义成友元类,如果你是我的 友元类,那么你就可以在你的成员函数中,访问我的所有成员,包括 public,protected,private
我们修改类 A,让类 C 成为类 A的 友元类
定义友元类后,C 类可以访问 A类的所有成员
A a;
C c;
c.callCAF(3, a);
注意:每个类都负责控制自己的友元类和友元函数:所以:
- 友元关系不能被继承
- 友元关系是单向的
- 友元关系是没有传递性的
友元成员函数(不希望整个类都成为 Friend,只希望某些成员函数是我的朋友)
写这种友元成员的函数,必须要注意代码组织结构,因为有声明和实现依赖关系在这里边
callCAF:本来是 C 中的成员函数,同时也是类 A 的友元函数 ===> 友元成员函数
友元成员函数:类中的一个 public 成员函数
总结
友元 Friend
- 优点:允许在特定情况下。某些非成员函数访问类的 protected、private 成员,从而提出友元这一概念
- 缺点:破坏了类封装性,降低了类的可靠性和可维护性