计算时间:一个C++运算符重载示例
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)是作为参数被传递的对象。
计算时间:一个C++运算符重载示例的更多相关文章
- YTU 2617: B C++时间类的运算符重载
2617: B C++时间类的运算符重载 时间限制: 1 Sec 内存限制: 128 MB 提交: 284 解决: 108 题目描述 C++时间类的运算符重载 定义一个时间类Time,其数据成员为 ...
- 问题 C: B C++时间类的运算符重载
题目描述 C++时间类的运算符重载 定义一个时间类Time,其数据成员为表示时间的小时(hour).分(minute),秒(second). 重载运算符“+”,使之能用于时间对象的加法运算:重载运算符 ...
- C++学习笔记之运算符重载
一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...
- C++运算符重载详解
1.什么是运算符重载 运算符重载是一种函数重载. 运算符函数的格式:operatorop(argument-list)例如,operator+()重载+运算符.其中的op,必须是有效的C++运算符,如 ...
- ylbtech-LanguageSamples-OperatorOverLoading(运算符重载)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-OperatorOverLoading(运算符重载) 1.A,示例(Sample) 返回 ...
- C++:运算符重载函数之友元运算符重载
5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算 ...
- C++基础——运算符重载友元函数示例
一.前言 其实本人学习C++的目的,只是为了体会OOP设计思想,并为利用System Verilog验证复杂设计做准备.如果想要真正做点软件方面项目级的东西,还需要掌握其他高级语言和库.框架等知识.因 ...
- Java 原始数据类型的计算:运算符重载(Operator Overload)和类型转换(Type Conversion)
原文阅读:<算法(第四版)>第一章 第一节:基础编程模型 有没有在面试的时候被问到:下面这几行代码的执行结果是什么?依据是什么? System.out.println (5/3); Sys ...
- PoEduo - C++阶段班【Po学校】-Lesson03-5_运算符重载- 第7天
PoEduo - Lesson03-5_运算符重载- 第7天 复习前面的知识点 空类会自动生成哪些默认函数 6个默认函数 1 构造 2 析构 3 赋值 4 拷贝构造 5 oper ...
随机推荐
- linux下getrlimit与sysconf函数
#include <stdio.h> #include <sys/time.h> #include <sys/resource.h> int main(int ar ...
- [uart]UART中的硬件流控RTS与CTS
转自:http://blog.csdn.net/zeroboundary/article/details/8966586 在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) ...
- 【 Linux 】单台服务器上并发TCP连接数
单台服务器上并发TCP连接数 问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制: 对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的 ...
- iOS开发小技巧--定义宏和pch文件的使用
一.创建pch文件,默认跟项目同名 二.告诉系统,编译的时候要编译pch文件的步骤 三.把经常用到的宏 或者 分类 包含到这里
- 一、VM8.0 + CentOS 6.5 连接网络
VM8.0 + CentOS 6.5 连接网络
- 12款优秀jQuery Ajax分页插件和教程
在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 Web 项目的用户体验有了极大的提高,如今借助优秀的 ...
- 登录centos虚拟机后显示-bash-4.1
http://zhidao.baidu.com/link?url=KwpGOdwFw1oxnL71pvPlfRgbRL_IuQeYRzIYJjiDb2SnX0dQye5yUXqHAGSyuD6u2nD ...
- 编写一个Filter,除继承HttpServlet类外还需要( )。
A.继承Filter 类 B.实现Filter 接口 C.继承HttpFilter 类 D.实现HttpFilter接口 解答:B
- Floyd算法实例
~ 当k=0时,我们关注的是邻接矩阵的第0行和第0列,即顶点0的入边和出边: 考察矩阵中其他元素,如果元素D[i][j]向第0行和第0列的投影D[0][j]和D[i][0]都有值,就说明原图中从 i ...
- UIView的几个枚举定义
UIView是iOS开发最主要的视图,非常多控件都是继承它,掌握当中的几个基本枚举定义,有利益理解视图的载入和參数差别. 一.UIViewAnimationCurve UIView的基本动画变化规律 ...