问题描述
为Date类实现如下成员:
- 构造器,可以初始化年、月、日。
- 大于、小于、等于(> 、< 、==)操作符重载,进行日期比较。
- print() 打印出类似 2015-10-1 这样的格式。
然后创建两个全局函数:
- 第1个函数 CreatePoints生成10个随机的Date,并以数组形式返回;
- 第2个函数 Sort 对第1个函数CreatePoints生成的结果,将其按照从小到大进行排序。
最后在main函数中调用CreatePoints,并调用print将结果打印出来。然后调用Sort函数对前面结果处理后,并再次调用print将结果打印出来。
c++实现
//定义Date头文件
#ifndef DATE_H_INCLUDED
#define DATE_H_INCLUDED
#include <iostream>
using namespace std;
class Date;
void Sort(Date* date, const int& n);
void CreatePoints(Date* date, const int& n);
class Date
{
public:
Date(int Year=0,int Month=0,int Day=0) :year(Year), month(Month) ,day(Day){}
bool operator > (const Date& d2)
{
if(year>d2.year||(year==d2.year&&month>d2.month||(year==year&&month==d2.month&&day>d2.day)))
{
return true;
}
else
{
return false;
}
}
bool operator < (const Date d2)
{
if(year<d2.year||(year==d2.year&&month<d2.month)||(year==d2.year&&month==d2.month&&day<d2.day))
{
return true;
}
else
{
return false;
}
}
bool operator ==(const Date& d2)
{
if(year==d2.year&&month==d2.month&&day==d2.day)
return true;
return false;
}
bool isleagl(Date& date)
{
if((date.getmonth()==4||date.getmonth()==6||date.getmonth()==9||date.getmonth()==11)&&date.getday()>30)
{
return false;
}
else if(date.getmonth()==2)
{
if((date.getyear()%4==0&&date.getyear()%100!=0)||date.getyear()%400==0)
{
if(date.getday()>29)
{
return false;
}
}
else if(date.getday()>28)
{
return false;
}
}
return true;
}
int getyear() const {return year;}
int getmonth()const {return month;}
int getday() const {return day;}
void print()
{
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
friend void CreatePoints(Date* date,const int& n);
friend void Sort(Date* date, const int& n);
private:
int year;
int month;
int day;
};
#endif // DATE_H_INCLUDED
#include<stdlib.h>
using namespace std;
//日期合法性检查
bool isleagl(Date& date)
{
if((date.getmonth()==4||date.getmonth()==6||date.getmonth()==9||date.getmonth()==11)&&date.getday()>30)
{
return false;
}
else if(date.getmonth()==2)
{
if((date.getyear()%4==0&&date.getyear()%100!=0)||date.getyear()%400==0)
{
if(date.getday()>29)
{
return false;
}
}
else if(date.getday()>28)
{
return false;
}
}
return true;
}
//创建日期并初始化
void CreatePoints(Date *date,const int&n)
{
for(int i=0;i<n;)
{
int Year=rand()%3000+1;
int Month=rand()%12+1;
int Day=rand()%31+1;
date[i]=Date(Year,Month,Day);
if(isleagl(date[i]))
{
++i;
}
}
}
//日期排序
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;
}
}
}
}
int main()
{
Date *date=new Date[10];
CreatePoints(date,10);
cout<<"CreatData:"<<endl;
for (int i = 0; i < 10; i++ )
{
date[i].print();
}
Sort(date,10);
cout << "after sort:" << endl;
for (int i = 0; i < 10; i++ )
{
date[i].print();
}
delete[] date;
return 0;
}
运行结果:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。