文章目录
一:前言
C++类和对象里面的默认成员函数,如构造函数,拷贝构造赋值重载这些问题虽然说是不难,但是想要写出一个标准的类还是具有一定挑战性的。而编写日期类是一个很好的练手项目
此次的博客,为了更好的练习类与对象,完成了一个日期类的小项目
二:布局
Test.cpp
用于检验代码的逻辑正确性Date.cpp
中存放的是关于函数的实现Date.h
中存放的是关于类的声明
需要实现的主要函数如下:
三:实现
1、默认成员函数实现
虽然没有过多详细介绍,但多多少少也有一定的参考价值
(1)全缺省构造函数
实现的条件限制如下:
- 年份可以无限大,但是不能小于0
- 月份最小是1,最大是12
- 每月的天数有28,29,30,31这四种选择,但本质最特殊还是二月,闰年29天,平年28天
上述最难实现的是最后一点,月份所对应天数的实现。
我们必须实现一个获得当月天数的函数,其实不止是这个构造函数要用,后面的很多函数都要用,所以也可以将其设置为内联函数(inline)
GetMonthDay
函数实现过程如下:
int Date::GetMonthDay(int year, int month)
{
int monthDay[] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int day = monthDay[month];
//当月份为二月时,判断平闰年,是否二月需要+1
if (month == 2 &&
(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)))
{
day += 1;
}
return day;
}
基于GetMonthDay
函数,实现全缺省的构造函数
Date::Date(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
if (!(_year >= 0 &&
_month > 0 && _month < 13 &&
_day > 0 && _day < GetMonthDay(year, month)))
{
cout << "日期非法" << endl;
}
}
(2)拷贝构造函数
拷贝构造函数是构造函数的重载形式。所以很简单,注意this指针
Date d2(d1)
相当于Date d2=d1
Date::Date(const Date& d)
{
_year = d._year;
_month = d._month;
_day = d