首页 技术 正文
技术 2022年11月19日
0 收藏 546 点赞 2,780 浏览 3262 个字

Time类是一个用于计算时间的类,其原型如下:
程序清单11.1 mytime0.h

// mytime0.h -- Time class before operator overloading
#ifndef MYTIME0_H_
#define MYTIME0_H_class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h, int m = );
void AddMin(int m);
void AddHr(int h);
void Reset(int h = , int m = );
Time Sum(const Time & t) const;
void Show() const;
};
#endif // MYTIME0_H_

Time类提供了用于调整和重新设置事时间、显示时间、将两个事件相加的方法。程序清单11.2列出了方法定义。
程序清单11.2 mytime0.cpp

// mytime0.cpp -- implementing Time methods
#include <iostream>
#include "mytime0.h"Time::Time()
{
hours = minutes = ;
}Time::Time(int h, int m)
{
hours = h;
minutes = m;
}void Time::AddMin(int m)
{
minutes += m;
hours += minutes / ;
minutes %= ;
}void Time::AddHr(int h)
{
hours += h;
}void Time::Reset(int h, int m)
{
hours = h;
minutes = m;
}Time Time::Sum(const Time & t) const
{
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / ;
sum.minutes %= ;
return sum;
}void Time::Show() const
{
std::cout << hours << " hours, " << minutes << "minutes";
}

最后,程序清单11.3对Time类中计算时间总和的部分进行了测试。
程序清单11.3 usetime0.cpp

// usetime0.cpp -- using the first draft of the Time class
// conpile usetime0.cpp and mytime0.cpp together
#include <iostream>
#include "mytime0.h"int main()
{
using std::cout;
using std::endl;
Time planing;
Time coding(, );
Time fixing(, );
Time total; cout << "planing time = ";
planing.Show();
cout << endl; cout << "coding time = ";
coding.Show();
cout << endl; cout << "fixing time = ";
fixing.Show();
cout << endl; total = coding.Sum(fixing);
cout << "coding.Sum(fixing) = ";
total.Show();
cout << endl; return ;
}

下面是程序清单11.1、程序清单11.2和程序清单11.3组成的程序的输出:

planing time = 0 hours, 0 minutes
coding time = 2 hours, 40 minutes
fixing time = 5 hours, 55 minutes
coding.Sum(fixing) = 8 hours, 35 minutes

11.2.1 添加加法运算符
将Time类转换为重载的加法运算符很容易,只要将Sum()的名称改为operator +()即可。这样做是对的,只要把运算符(这里为+)防盗operator的后面,并将结果用作方法名即可。在这里,可以在标识符中使用字幕、数字或下划线之外的其他字符。程序清单11.4和程序清单11.5反映了这些细微的修改。
程序清单11.4 mytime1.h

// mytime1.h -- Time class before operator overloading
#ifndef MYTIME1_H_
#define MYTIME1_H_class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h, int m = );
void AddMin(int m);
void AddHr(int h);
void Reset(int h = , int m = );
Time operator + (const Time & t) const;
void Show() const;
};
#endif // MYTIME1_H_

程序清单11.5 mytime1.cpp

// mytime1.cpp -- implementing Time methods
#include <iostream>
#include "mytime1.h"Time::Time()
{
hours = minutes = ;
}Time::Time(int h, int m)
{
hours = h;
minutes = m;
}void Time::AddMin(int m)
{
minutes += m;
hours += minutes / ;
minutes %= ;
}void Time::AddHr(int h)
{
hours += h;
}void Time::Reset(int h, int m)
{
hours = h;
minutes = m;
}Time Time::operator+(const Time & t) const
{
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / ;
sum.minutes %= ;
return sum;
}void Time::Show() const
{
std::cout << hours << " hours, " << minutes << " minutes";
}

用一个usetime1.cpp做测试,得到和上述一样的结果。

usetime1.cpp:

// usetime1.cpp -- using the first draft of the Time class
// conpile usetime0.cpp and mytime0.cpp together
#include <iostream>
#include "mytime1.h"int main()
{
using std::cout;
using std::endl;
Time planing;
Time coding(, );
Time fixing(, );
Time total; cout << "planing time = ";
planing.Show();
cout << endl; cout << "coding time = ";
coding.Show();
cout << endl; cout << "fixing time = ";
fixing.Show();
cout << endl; total = coding + fixing;
cout << "coding.Sum(fixing) = ";
total.Show();
cout << endl; return ;
}

和Sum()一样,operator+()也是由Time对象调用的,它将第二个Time对象作为参数,并返回一个Time对象。因此,可以像调用Sum()那样来调用operator+()方法:

total = coding.operator+(fixing);    // function notation

但将该方法命令为operator+()后,也可以使用运算符表示法:

total = coding + fixing;        // operator notation

这两种表示法都将调用operator+()方法。注意,在运算符表示法中,运算符左侧的对象(这里为coding)是调用对象,运算符右边的对象(这里为fixing)是作为参数被传递的对象。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,896
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,423
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,241
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,055
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,684
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,722