问题描述
为Date类实现如下成员:
1. 构造器,可以初始化年、月、日。
2. 大于、小于、等于(> 、< 、==)操作符重载,进行日期比较。
3. print() 打印出类似 2015-10-1 这样的格式。
然后创建两个全局函数:
1. 第1个函数 CreatePoints生成10个随机的Date,并以数组形式返回
2. 第2个函数 Sort 对第1个函数CreatePoints生成的结果,将其按照从小到大进行排序。
最后在main函数中调用CreatePoints,并调用print将结果打印出来。然后调用Sort函数对前面结果处理后,并再次调用print将结果打印出来。
代码实现
date.h头文件
#ifndef _DATE_
#define _DATE_
#include <iostream>
using namespace std;
class Date;
void Sort(Date* date, const int& n);
void CreatePoints(Date* date, const int& n);
ostream& operator << (ostream& obj,const Date& date);
class Date
{
public:
Date (int y = 0, int m = 0, int d = 0) : year(y), month(m), day(d) {}
bool operator == (const Date& date)
{
return year == date.year && month == date.month && day == date.day;
}
bool operator > (const Date& date)
{
if (year != date.year) return year > date.year;
else if (month != date.month) return month > date.month;
else if (day != date.day) return day > date.day;
else return false;
}
bool operator < (const Date& date)
{
if (year != date.year) return year < date.year;
else if (month != date.month) return month < date.month;
else if (day != date.day) return day < date.day;
else return false;
}
void Print()
{
cout << year << '-' << month << '-' << day << endl;
}
private:
int year;
int month;
int day;
friend void CreatePoints(Date* date, const int& n);
friend ostream& operator << (ostream& obj,const Date& date); /*作业没要求,自己重载<<运算符 */
};
#endif
date.cpp实现文件
#include "date.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
ostream& operator << (ostream& obj,const Date& date)
{
return obj << date.year << '-' << date.month << '-' << date.day;
}
void CreatePoints(Date* date, const int& n)
{
srand(time(NULL)); /*初始化种子*/
/*没有考虑具体日期,如闰年、不同月份有不同天数等*/
for (int i=0; i<n; ++i)
{
date[i].year = rand() % 2015 + 1;
date[i].month = rand() % 12 + 1;
date[i].day = rand() % 30 + 1;
}
}
/*冒泡排序*/
void Sort(Date* date, const int& n)
{
Date temp;
for (int i=0; i<n; ++i)
{
for (int j=0; j<n-i-1; ++j)
{
if (date[j] > date[j+1])
{
temp = date[j];
date[j] = date[j+1];
date[j+1] = temp;
}
}
}
}
main.cpp主程序
#include <iostream>
#include "date.h"
#define NUM 10
using namespace std;
int main(int argc, char** argv)
{
Date *date = new Date[NUM];
CreatePoints(date,NUM);
cout << "before sort:" << endl;
for (int i = 0; i < NUM; i++ )
{
date[i].Print();
/*或cout << date[i] << endl;*/
}
Sort(date,NUM);
cout << "after sort:" << endl;
for (int i = 0; i < NUM; i++ )
{
date[i].Print();
/*或cout << date[i] << endl;*/
}
delete[] date;
return 0;
}
注意
如果class的private成员都是原声类型的话,不需要些重载赋值操作符(=)的,编译器会自动生成此函数。