友元

  通常C++访问类私有部分的方法是类的公有方法,有时候不适合特定的编程问题。C++提供了另外一种形式的访问权限:友元,友元有3种:
• 友元函数;
• 友元类;
• 友元成员函数;
通过让函数成为类的友元,可以赋予该函数与类的成员函数一样的访问权限。

需要友元的情况:
  class Time;是一个类,为该类重载了*运算符,Time & Time::operator*(double b),这将限制*的使用方式,左侧的操作数必须是Time对象。如果写成t*b则将被转换为下面的成员函数调用t.operatorb,那如果写成b*t,从概念上说和tb相同,但b不是Time对象。(重要:左侧的操作数应是调用对象)
  解决这个问题的方式有两种,一种是人为记住固定的编写格式,参数位置一一对应。另一种方式是——非成员函数。非成员函数不是对象调用的,它使用的所有值,都是显示参数。使用非成员函数可以按所需的顺序获得操作数,但是常规非成员函数无法访问类的私有数据。然而,有一类特殊的非成员函数可以访问类的私有成员,它们被称为友元函数

创建友元函数
  创建友元函数的第一步是将其原型放在类声明中,并在原型声明前加上关键字friend

friend Time operator*(doule m, const Time & t);

上面的声明有如下两点含义:
1.虽然operator*()函数是在类声明中声明的,但它不是成员函数,因此不能使用成员运算符来调用;
2.虽然operator*()函数不是成员函数,但它与成员函数的访问权限相同。
第二步是编写函数的定义。它不是成员函数,所以不使用Time::限定符。另外不要在定义中使用关键字friend。
  如果要为类重载运算符,并将非类的项作为其第一个操作数,则可以用友元函数来反转操作数的顺序。

未完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值