C++友元

先从书上的一个例子开始,明白为什么C++需要引入友元的概念。

这里认为你熟悉Point类(就是一个记录点的性质的类),如果我要由两个点Point APoint B计算他们之间的距离,那么程序该如何设计呢?初学类与对象者的第一想法,在Point类里头再写一个函数呗。

想想一下情况:假设我在Point类里实现了这个函数,那在此函数中必然要用到本类的实例化对象,因为要通过这个对象访问到它的数据成员来进行距离计算嘛。恩,想想也是可以的嘛。但是这样是有问题的,这个问题不在语法上(前面假设的没毛病),而在可读性上,毕竟距离是Point与Point之间的关系,所以它不应该属于“每一个单独的点,也不属于整个Point类”。

那直接写一个函数呢?语法上也是可以的,但问题是还是“不能体现这个函数与点之间的联系”。

写到这儿我觉得前面两种解决方式也未尝对此题不可,但是考虑到C++是一个面向对象的语言,一旦用于大型程序,这些“小聪明”可能就不中了。

那到底靠什么来联系这样一层关系?这就是友元机制了。

说明了友元机制的价值之后,具体用法参见维基百科:

面向对象程序设计中,友元函数(friend function)是一个指定类(class)的“朋友”,该函数被允许访问该类中private、protected、public的数据成员。普通的函数并不能访问这些数据,然而宣告一个函数成为一个类的友元函数则被允许访问这些数据。

友元函数的宣告可以放在类声明的任何地方,不受访问限定关键字private、protected、public的限制。一个相似的概念是友谊类

友谊关键字应该谨慎使用。如果一个拥有private或者protected成员的类,宣告过多的友元函数,可能会降低封装性的价值,也可能对整个设计框架产生影响。

还要强调的是,友元类“不继承,单向的,不传递”。

总之,有了友元机制之后将为C++编程带来相当大的方便。
参考《C++语言程序设计(第四版)》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值