因为类和对象有点复杂,一时间不知道怎么组织语言,所以先写这个。
---------
既然决定写一个 日期 类,那就需要三个参数:
年,月,日
所以先定义出来:
class Data
{
public:
private:
int _year;
int _month;
int _day;
};
里面的三个对象就不用公开,有需要可以直接在类里面操作。
------
构造函数
我们知道,有三种构造函数:
1、无参
2、缺省
3、编译器自带
这里就不适合用编译器自带的,因为编译器自带的对于内置类型(int、double...)不会做处理,所以这里用的是缺省参数。
Data(int year,int month, int day)
{
this->_year = year;
this->_month = month;
this->_day = day;
}
为了方便阅读,所以我在这里会用this指针,可以简单理解为就是要改变的参数,假设这是d1要初始化,那this就是d1,this->_year = d1->year;
当写出这样的代码的时候,有没有一种可能,就是用户使用的时候他传来一个相对错误的日期,比方说:
不是闰年的时候传进来2 29号
一个月的第32天
公元300年
...
显然,这些是我们没有考虑到的,所以为了更合理的使用这个日期类,我们最好加一个判断条件:
如果年份太离谱,报错
如果月份日期不对,报错
但是,要如何来判断这个月份对不对呢?
可以再套一个函数:
Data(int year,int month, int day)
{
if (year < 1900 ||
month < 1 ||
month>12 ||
day>GetMonthDay(year, month))
{
cout << "error" << endl;
}
this->_year = year;
this->_month = month;
this->_day = day;
}
稍微改进一下,如果年份小于1900,那就报错,如果月份小于1,如果月份大于12,或者是
day>GetMonthDay ;
这个GetMonthDay ,是之后要实现的一个函数,来判断这个月有多少天,具体实现也挺简单的,首先要开辟一个数组,这个数组里面放上每个月的具体天数,然后根据传过去的参数来返回这个月有多少天。
这里要注意一点,别忘了判断闰年:
int GetMonthDay(int year, int month)
{
int MonthDayArray[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (year % 4 == 0 && year % 100 != 0 ||
year % 400 == 0)
if (month == 2)
return 29;
return MonthDayArray[month];
}
这里要注意的一点是,最后返回日期的时候,如果创建的数组的大小是12,那返还的的应该是MonthDayArray[month-1]
连起来:
既然写好了构造函数,那就来用一下: