当前位置 : 主页 > 编程语言 > c语言 >

C++ ---->大类 ~~ 大对象 (中后_++)

来源:互联网 收集:自由互联 发布时间:2023-09-03
各位好友, 欢迎来到本期博客 !本期, 正式开战 日期类 计算 ! -----日期类 --计算 : 1. 相加 “ + ” “ += ” 头文件 “Date.h” #include iostreamusing std::cout;using std::endl;class Date{public:Dat

各位好友, 欢迎来到本期博客 !本期, 正式开战 日期类 计算 !

----->日期类 -->计算 :>

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”

C++ ---->大类 ~~ 大对象  (中后_++)_日期类 -->计算


----->实现环节 “Date.cpp”

C++ ---->大类 ~~ 大对象  (中后_++)_错误示列讲解_02


----->测试 与运行结果 :>

C++ ---->大类 ~~ 大对象  (中后_++)_相减_03



 ------->解析 :>

代码 模块 一 :>

C++ ---->大类 ~~ 大对象  (中后_++)_考量过去天数_04

各位好友,请仔细观察, 标注的红色区域 !建立 静态区 --->避免 程序运行过程 --->一遍又一遍 建立栈区


程序需要获取数据的时候, 可以直接从静态区 得到  --->方便又快捷  -->从而提高程序的运行效率


代码 模块 二 :>

C++ ---->大类 ~~ 大对象  (中后_++)_相减_05

各位好友, 请注意上述标注区域 !一直一来, 关注程序 高效 与快捷 !是区分 优良程序的一个重要指标 !


如此, 高效 与简洁, 更好地展现出 一名合格的程序员 --->对待事物采取的独到视角 !


------>以下 --->错误示例 :>

C++ ---->大类 ~~ 大对象  (中后_++)_考量过去天数_06


----->测试 与运行结果 :>

C++ ---->大类 ~~ 大对象  (中后_++)_考量过去天数_07


各位好友, 上述代码, 不知是否已经观察到, 错误的原因 ! 请注意  重载运算符号 ,此时 变成了 “ + ” 

致使, 程序运行结果, 没有受到丝毫影响 !现 对上述情况, 进行分析 :>

其实, 只有 一个 含有 加号 “ + ” 表达式, 并且 表达式中, 不含有 赋值 符号,从而不会出现 返回值。

其实, 底层实现上, 这个返回值 是存在的, 不过并没有变量 去接收(存储) !从而 出作用域后  --->自动销毁 


----->继续推进 --->日期类 --->计算 :>

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();
}

为了方便好友们, 得到更好地体验 与更好地理解 !现 附上有彩色的代码图样 :>

---->实现环节 :>

C++ ---->大类 ~~ 大对象  (中后_++)_日期类 -->计算_08


---->测试 与运行结果 :>

C++ ---->大类 ~~ 大对象  (中后_++)_日期类 -->计算_09



-----> 错误 示例 :>

C++ ---->大类 ~~ 大对象  (中后_++)_相加_10

----->测试 与运行结果 :>

C++ ---->大类 ~~ 大对象  (中后_++)_相减_11

各位好友, 上述解释的逻辑, 同之前  “ 相加 ”  错误示范 ---->道理是一样的 ! 在这里 -->不多做表述了 

以此来避免 重复赘余 !---->影响整篇博文的阅读体验 !


----->拓展 :>

---->测试过去天数(含有负数)

C++ ---->大类 ~~ 大对象  (中后_++)_相减_12

各位好友, 上述运行结果 :>天数变成了  “ -40 ” 这纯属是无稽之谈 !那么该如何解决这个问题呢?

其实, 思路很简单 !既然 结果出现了负数, 而且 这天数还超过了法定限度 “ 28 29 30 31” 

显然, 这是由于 过去天数参与运算时, 并没有向上一个月 进行  “ 借 ” 天数 !意即, 需要往后退一位

请看下面的逻辑实现 :>

---->测试环节 “Date.cpp”

C++ ---->大类 ~~ 大对象  (中后_++)_相加_13

---->测试 与运行结果 :>

C++ ---->大类 ~~ 大对象  (中后_++)_相减_14

各位好友, 请注意 --->上述代码环节, 日期是负数, 表示 过去的天数 !

同时, 注意 -->标注框框 ! 必须要有两个 重载运算函数 参与, 才能完成实现

如果 只写 其中之一, 是不能完成编译过程的 !


各位好友, 本期模块已完成 -->梳理 !希望, 可以为好友 带来新的体验 与收获 !

下一期, 将继续进行战斗 !目标再一次指向 构造函数 !未来几期博文, 将接触到 升级进化版 构造函数 !

感谢好友们来访 !下一期, 再相会 !

上一篇:C# 按指定宽高缩放图片
下一篇:没有了
网友评论