C++的友元机制:友元类和友元函数

我们在学习类的时候,只有类的成员函数可以访问类的非公有数据成员。

而C++,提供了友元机制,允许一个类将其非公有成员的访问权授予指定的函数

友元的声明只能出现在类定义的内部的任何地方,一般我们将友元的声明放在类定义的开始或者结尾。

由于友元不是授予友元关系的那个类的成员,所以它们不受访问控制的影响。

友元可以是普通的函数,或者其它已定义的类的成员函数,又或是整个类

  • 将一个函数设为友元,该函数被称为友元函数;
  • 将一个类设为友元,则称为友元类。友元类的所有成员函数都可以访问授予友元关系的那个类的非公有成员

因此,类的非公有成员的用户可以有两个:类成员和友元


友元函数有两种,一种是在类体外定义的普通函数,另一种是其它类的成员函数,这种称为友元成员函数。下面的代码是前者的例子:




友元成员函数的代码例子:




介绍了友元函数,我们接着介绍友元类吧。如果类B是类A的友元,那么友元类B的所有成员函数都是A类的友元函数

友元类的定义一般形式如下:



关于友元类,下面要注意几点:

  • 友元的关系是单向的,而不是双向的。如果声明了类B是类A的友元类,不等于类A也是类B的友元类,类A中的成员函数不能访问类B中的私有数据,生活的例子:你待他如挚爱,他可能捅你一刀
  • 友元的关系不能传递或继承,如果类B是类A的友元类,类C是类B的友元类,不等于类C是类A的友元类。如果想让类C是类A的友元类,必须显式地在类A中另外声明。生活的例子:你的朋友的朋友不一定是你的朋友,也可能是你的敌人或陌生人


谈一下友元这种机制的利弊吧:

        面向对象程序设计的一个基本原则是封装性和信息隐蔽,而友元却可以访问其他类中的私有成员,突破了封装原则。友元的使用有助于数据共享,能提高程序的效率,但也不要滥用,要在数据共享与信息隐蔽之间选择一个恰当的平衡点

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值