友元函数

为何需要友元?

在为类重载二元运算符时(带两个参数的运算符),常常需要友元
例子
该例子中重载了*运算符,需要一个double类型的参数

#ifndef __TIME_H__
#define __TIME_H__

class TIME
{
	private:
		int nHours;
		int nMinutes;
	public:
		TIME();
		TIME(int H, int M);
		void SetTime(int H, int M);
		void ShowTime(void) const;
		TIME operator+(const TIME & t) const;
		TIME operator*( double b) const;
};

#endif
TIME TIME::operator*( double b) const
{
	TIME Result;

	long TotalMinutes = nHours * b * 60 + nMinutes * b;
	Result.nHours = TotalMinutes/60;
	Result.nMinutes = TotalMinutes%60;

	return Result;
}
#include "Time.h"

int main(int argc, char* argv[])
{
	TIME a(1,50);
	TIME b(2,10);

	TIME c = a * 10.3 ;

	c.ShowTime();
	return 0;
}

当操作符的左边给出的是对象,右边给出的是double变量时,没有错误
因为他是转化成 c = a.operator(10.3);*
但是T IME c = 10.3 * a ; 将引发错误

解决这个问题可以有两种方法

①时刻牢记 左边应该是调用对象
②用可以访问类私有成员的 非成员函数 :友元函数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值