各位好友, 欢迎来到本期博客 !本期, 正式开战 日期类 计算 !
----->日期类 -->计算 :>
1. 相加 “+” “+=”
头文件 “Date.h”
#include <iostream>
using std::cout;
using std::endl;
class Date
{
public:
Date(int year = 2018, int month = 05, int day = 07);
Date& operator+=(int day);
int GetMonthDay(int day);
// 内联函数
void Print()
{
cout << _year << " - " << _month << " - " << _day << endl << endl;
}
private:
int _year;
int _month;
int _day;
};
实现环节 “Date.cpp”
#include "Date.h"
// 由于是在另一个文件之下, 需要指明 是在哪一个 类域之下的函数定义
Date::Date(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
Date& Date::operator+=(int day)
{
_day += day;
if(_day > GetMonthDay(_year, _month))
{
_day -= GetMonthDay(_year, _month);
++_month;
if(_month == 13)
{
++_year;
_month = 1;
}
}
return *this;
}
int Date:: GetMonthDay(_year, _month)
{
static int _arry[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(_month == 2 && ((_year % 4 == 0 && _year % 400 != 0) || _year % 400 == 0))
{
return 29;
}
else
{
return _arry[_month];
}
}
为了方便好友们, 得到更好地体验 与更好地理解 !现 附上有彩色的代码图样 :>
----->头文件 “Date.h”
----->实现环节 “Date.cpp”
----->测试 与运行结果 :>
------->解析 :>
代码 模块 一 :>
各位好友,请仔细观察, 标注的红色区域 !建立 静态区 --->避免 程序运行过程 --->一遍又一遍 建立栈区 !
程序需要获取数据的时候, 可以直接从静态区 得到 --->方便又快捷 -->从而提高程序的运行效率 !
代码 模块 二 :>
各位好友, 请注意上述标注区域 !一直一来, 关注程序 高效 与快捷 !是区分 优良程序的一个重要指标 !
如此, 高效 与简洁, 更好地展现出 一名合格的程序员 --->对待事物采取的独到视角 !
------>以下 --->错误示例 :>
----->测试 与运行结果 :>
各位好友, 上述代码, 不知是否已经观察到, 错误的原因 ! 请注意 重载运算符号 ,此时 变成了 “ + ”
致使, 程序运行结果, 没有受到丝毫影响 !现 对上述情况, 进行分析 :>
其实, 只有 一个 含有 加号 “ + ” 表达式, 并且 表达式中, 不含有 赋值 符号,从而不会出现 返回值。
其实, 底层实现上, 这个返回值 是存在的, 不过并没有变量 去接收(存储) !从而 出作用域后 --->自动销毁
----->继续推进 --->日期类 --->计算 :>
2. 相减 “-” “-=”
实现环节 “Date.cpp”
int Date:: GetMonthDay(_year, _month)
{
static int _arry[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(_month == 2 && ((_year % 4 == 0 && _year % 400 != 0) || _year % 400 == 0))
{
return 29;
}
else
{
return _arry[_month];
}
}
Date& Date::operator-=(int day)
{
_day -= day;
while(_day <= 0)
{
--_month;
if(_month == 0)
{
_month = 12;
--_year;
}
_day += GetMonthDay(_year, _month);
}
return *this;
}
测试环节 “Teset.cpp”
#include "Date.h"
int main()
{
Date d2(2023, 5, 10);
d2 -= 50;
d2.Print();
}
为了方便好友们, 得到更好地体验 与更好地理解 !现 附上有彩色的代码图样 :>
---->实现环节 :>
---->测试 与运行结果 :>
-----> 错误 示例 :>
----->测试 与运行结果 :>
各位好友, 上述解释的逻辑, 同之前 “ 相加 ” 错误示范 ---->道理是一样的 ! 在这里 -->不多做表述了
以此来避免 重复赘余 !---->影响整篇博文的阅读体验 !
----->拓展 :>
---->测试过去天数(含有负数)
各位好友, 上述运行结果 :>天数变成了 “ -40 ” 这纯属是无稽之谈 !那么该如何解决这个问题呢?
其实, 思路很简单 !既然 结果出现了负数, 而且 这天数还超过了法定限度 “ 28 29 30 31”
显然, 这是由于 过去天数参与运算时, 并没有向上一个月 进行 “ 借 ” 天数 !意即, 需要往后退一位
请看下面的逻辑实现 :>
---->测试环节 “Date.cpp”
---->测试 与运行结果 :>
各位好友, 请注意 --->上述代码环节, 日期是负数, 表示 过去的天数 !
同时, 注意 -->标注框框 ! 必须要有两个 重载运算函数 参与, 才能完成实现 !
如果 只写 其中之一, 是不能完成编译过程的 !
各位好友, 本期模块已完成 -->梳理 !希望, 可以为好友 带来新的体验 与收获 !
下一期, 将继续进行战斗 !目标再一次指向 构造函数 !未来几期博文, 将接触到 升级进化版 构造函数 !
感谢好友们来访 !下一期, 再相会 !