友元(Friend)

友元(突破 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);

注意:每个类都负责控制自己的友元类和友元函数:所以:

  1. 友元关系不能被继承
  2. 友元关系是单向的
  3. 友元关系是没有传递性的

友元成员函数(不希望整个类都成为 Friend,只希望某些成员函数是我的朋友)

写这种友元成员的函数,必须要注意代码组织结构,因为有声明和实现依赖关系在这里边
callCAF:本来是 C 中的成员函数,同时也是类 A 的友元函数 ===> 友元成员函数

友元成员函数:类中的一个 public 成员函数

总结

友元 Friend

  • 优点:允许在特定情况下。某些非成员函数访问类的 protected、private 成员,从而提出友元这一概念
  • 缺点:破坏了类封装性,降低了类的可靠性和可维护性
posted @ 2024-10-27 17:00  爱新觉罗LQ  阅读(6)  评论(0编辑  收藏  举报