c++友元

友元的目的是让一个函数或者类访问另一个类中的私有成员,本质是让其它不属于本类的成员(全局函数其它类的成员函数)成为类的成员而具备了本类成员的属性。

友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它需要在类的定义中加以声明,声明时只需在友元的名称前加上关键
friend,其格式如下:
friend 类型 函数名(形式参数);
一个函数可以是多个类的友元函数,只需要在各个类中分别声明。

声明位置
友元声明以关键字friend 开始,它只能出现在类定义中。因为友元不是授权类的成员,所以它不受其所在类的声明区域public private protected 的影响。通常我们选择把所有友元声明组织在一起并放在类头之后.
友元的利弊
友元不是成员但是它可以访问类中的私有成员友元的作用在于提高程序的运行效率,但是它破坏了类的封装性和隐藏性使得非成员函数可以访问类的私有成员不过类的访问权限确实在某些应用场合显得有些呆板,从而容忍了友元这一特别语法现象。
注意事项
(1)友元关系不能被继承。父类的友元不是子类的友元
(2)友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
(3)友元关系不具有传递性。若类B是类A的友元,类CB的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明


友元的三种实现
全局函数做友元
类做友元
成员函数做友元

class yuan
{
  friend int fr (yuan *y);
 friend class goodGay;
 friend void goodGay::visit();
 
  public:
  void func() const
  {
    a = 100;
    cout << "ddga" <<endl;
  }
  private:
  int m_b = 10;
};
 
同时注意,相同class的各个object互为friend
 
 
 
posted @   纸包鱼  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示