c++入门——友元

发布时间:2026/9/20 17:14:14
c++入门——友元 友元1.引入在一个类中我们用private和protected等访问限定符来封装成员对外暴露接口对内隐藏细节但是这也同时增加了一些限制在类外无法访问类内成员而友元提供了一种突破类访问限定符封装的方式可以实现类外访问类内成员分为友元函数和友元类2.友元函数友元函数的实现需要在友元函数前面加上friend并在需要访问的类中加上友元函数的声明但这仅仅只是一种声明并不意味着友元函数是要访问类的成员函数这个声明可以放在类内的任何位置不受访问限定符限制一个函数可以是多个类的友元在友元函数中可以自由的访问这些类的成员如下代码所示//前置声明 否则A里面友元函数声明里编译器不认识B类型class B;class A{friendvoidfunc(constAa,constBb);private:int_a11;int_a22;};class B{//一个函数可以是多个类的友元friendvoidfunc(constAa,constBb);private:int_b11;int_b22;};voidfunc(constAa,constBb){couta._a1endl;coutb._b1endl;}intmain(){A a;B b;func(a,b);return0;}func()函数需要访问到类A、B中的私有成员变量_a1、_b1如果不加友元是无法突破访问限定符访问的此处将友元声明添加在了A和B类内部使得func()可以访问类A、B的成员友元函数没有this指针必须显示传对象的参数3.友元类友元类为该类中所有的成员函数提供了一种访问其他类成员的方式友元类中的成员函数都可以看做是同一个其他类的友元函数都可以访问另一个类中的成员友元类的关系是单向的比如A是B的友元但是B并不是A的友元友元类的关系不能传递比如A是B的友元B是C的友元但A不是C的友元class C{friend class D;//单向关系 D可以访问C,C不能访问Dpublic:voidfun(constDd);/*{ cout d._d1 endl;这里_d1在后面 编译器找不到 }-要声明定义分离*/private:int_c13;int_c24;};class D{friend class C;//相互成为友元public://如果D里面需要频繁调用C里private 可以声明友元类voidfun(constCc){coutc._c1endl;coutc._c2endl;}private:int_d1;int_d2;};voidC::fun(constDd){coutd._d1endl;}intmain(){C c;D d;d.fun(c);return0;}友元虽然提供了访问的遍历但是也在一定程度上破坏了耦合度所以友元不宜多用

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询