友元

来自计算思维百科
跳转至: 导航搜索
友元.png

小明是一个大三的学生,他有很多朋友,小明的大部分朋友都了解他的基本信息,例如在哪里上学,家是哪里的,性格是怎样的。这些信息对于小明这个对象而言是公开的,用面向对象的用词讲,就是公有的;可以小明还有一些秘密,这些秘密只有他知道,例如他喜欢哪个女孩子,这些信息他的普通朋友是不知道的,用面向对象的用词讲,就是私有的;但是小明不想把心里的想法埋起来,他想找人倾诉,这时小明选择了一个最要好的朋友,把心里的想法告诉了这个朋友。用面向对象的用词讲,这个朋友就是友元,他访问了小明这个对象的私有成员,这是一个非常特殊的权限。在面向对象程序设计中,友元这个概念的提出,主要是为了处理一些特殊情况。

基本概念

我们已知道类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这又破坏了隐藏的特性。

为了解决上述问题,提出一种使用友元的方案。友元是一种定义在类外部的普通函数或类,友元不是成员函数,但是它可以访问类中的私有成员。友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。友元为封装隐藏这堵不透明的墙开了一个小孔,外界可以通过这个小孔窥视内部的秘密。

应用案例

应用1-

案例:

李先生是一个类,他的公有属性:姓名,电话、学历和职位;保护属性:电脑密码、手机密码和身份证号码;私有属性:银行卡密码;还有一些成员函数。

我们知道,只有李先生自身可以利用自己的成员函数去使用私有属性银行卡密码,其他的人无权利去调用李先生的银行卡密码,虽然这符合了面向对象的封装性,但是有的时候却带来了很多的不便利,比如李太太在周内要给家里添置新的家具,那么她一定要调用李先生的银行卡密码,但是却不被允许,只能李先生本人放弃当前的工作请假去支付,这是很不便利的,因次,需要将李太太调用李先生一行卡密码设置为友元,这样李太太就可以在需要的时候为家里买下东西就会方便很多。而如果不将李太太设置为友元而是将李先生的银行卡密码设置为公有的,这显然非常不符合常理。

可以体现的计算思维

友元体现了计算思维中的抽象特点,将现实生活中存在的信息共享的问题进行抽象,表达成一种具有特殊权限的函数,方便了在特殊情况下的信息访问。