C++Primer Plus第十一章类的使用,课后练习4,修改Time类,使用友元函数而非成员函数实现

4.重新编写最后的 Time 类示例(程序清单 11.10、程序清单11.11和程序清单 11.12),使用友元函数
来实现所有的重载运算符。

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

friend Time operator*(double m,const Time &t);//goes in class declaration

该原型意味着下面两点:
1,虽然 operator ()函数是在类声明中声明的,但它不是成员函数,因此不能使用成员运算符来调用;
2,虽然 operator
()函数不是成员函数,但它与成员函数的访问权限相同。
第二步是编写函数定义。因为它不是成员函数,所以不要使用Time::限定符。另外,不要在定义中使用关键字 fiend,定义应该如下:

Time operator*(double m,const Time &t)// friend not used in definition
{
   
   
	Time result;
	long totalminutes=t.hours*mult*60+t.minutes *mult;
	result.hours 	=totalminutes/60;
	result.minutes =totalminutes&60;
	return result;
}

有了上述声明和定义后,下面的语句:
A=2.75 B;
将转换为如下语句,从而调用刚才定义的非成员友元函数:
A=operator
(2.75,B);
总之,类的友元函数是非成员函数,其访问权限与成员函数相同。

头文件

#pragma once
#ifndef PE11_4_H_
#define PE11_4_H_

#include<iostream>

class Time
{
   
   
public:
	Time();
	Time(int h, int m = 0);
	void AddMin(int m);
	void AddHr(int h);
	void 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值