当使用日期的时候你经常需要确定某一日期是否在另一日期之前。我将为日期类增加下面这个成员函数(参见 Listing 1):
int compare(const Date& d2) const; |
Date:compare 类似于strcmp-如果当前对象(*this)在d2之前,它返回一个负整数;如果这两个日期相同,则返回0;否则返回一个正整数(参见 Listing 2 中的函数实现和 Listing 3 中的示例程序)。就像你们都很熟悉的C标准库中的qsort一样,你也可以使用Date::compare来对日期进行排序,就好像你使用strcmp对字符串进行排序一样。下面是一个可传递给qsort的比较函数(下个月的代码封装将包括qsort):
#include "date.h" int datecmp(const void *p1, const void *p2) { const Date *d1p = (const Date *) p1, *d2p = (const Date *) p2; return d1p->compare(*d2p); } |
运算符重载
大多数时候,拥有相关的运算符是更方便的,例如:
if (d1 < d2) // do something appropriate.. |
使用Date::compare来添加一个"小于"运算符是非常容易的——只要在类的定义里插入下面这个内联成员函数就可以了:
int operator<(const Date& d2) const {return compare(d2) < 0}; |
每一个表达式:d1 < d2出现的地方,都会被编译器翻译成函数调用的形式: