【C++】实现日期类相关接口(三)

简介: 【C++】实现日期类相关接口

【C++】实现日期类相关接口(二)https://developer.aliyun.com/article/1617311


7.2 Date.cpp

#include"Date.h"
Date::Date(int year, int month, int day)
{
  _year = year;
  _month = month;
  _day = day;
}
bool Date::operator<(const Date& d)
{
  if (_year < d._year)
  {
    return true;
  }
  else if (_year == d._year)
  {
    if (_month < d._month)
    {
      return true;
    }
    else if (_month == d._month)
    {
      if (_day < d._day)
      {
        return true;
      }
    }
  }
  return false;
}
// d1 <= d2
bool Date::operator<=(const Date& d)
{
  return *this < d || *this == d;
}
bool Date::operator>(const Date& d)
{
  return !(*this <= d);
}
bool Date::operator>=(const Date& d)
{
  return !(*this < d);
}
bool Date::operator==(const Date& d)
{
  return _year == d._year
    && _month == d._month
    && _day == d._day;
}
bool Date::operator!=(const Date& d)
{
  return !(*this == d);
}
// d1 += 10
Date& Date::operator+=(int day)
{
  _day += day;
  while (_day > GetMonthDay(_year, _month))
  {
    _day -= GetMonthDay(_year, _month);
    ++_month;
    if (_month == 13)
    {
      ++_year;
      _month = 1;
    }
  }
  return *this;
}
Date Date::operator+(int day)
{
  //Date tmp(*this);
  Date tmp = *this; // 
  tmp += day;
  return tmp;
}
// d1 + 10
//Date Date::operator+(int day)
//{
//  //Date tmp(*this);
//  Date tmp = *this; // 
//
//  tmp._day += day;
//  while (tmp._day > GetMonthDay(tmp._year, tmp._month))
//  {
//    tmp._day -= GetMonthDay(tmp._year, tmp._month);
//    ++tmp._month;
//    if (tmp._month == 13)
//    {
//      ++tmp._year;
//      tmp._month = 1;
//    }
//  }
//
//  return tmp;
//}
//
 d1 += 100
//Date& Date::operator+=(int day)
//{
//  *this = *this + day;
//
//  return *this;
//}
Date Date::operator-(int day)
{
  Date tmp = *this;
  tmp -= day;
  return tmp;
}
Date& Date::operator-=(int day)
{
  _day -= day;
  while (_day <= 0)
  {
    --_month;
    if (_month == 0)
    {
      --_year;
      _month = 12;
    }
    _day += GetMonthDay(_year, _month);
  }
  return *this;
}
// ++d ->d.operator++()
Date& Date::operator++()
{
  *this += 1;
  return *this;
}
// d++ ->d.operator++(0)
Date Date::operator++(int)
{
  Date tmp = *this;
  *this += 1;
  return tmp;
}
// d1 - d2
int Date::operator-(const Date& d)
{
  int flag = 1;
  Date max = *this;
  Date min = d;
  if (*this < d)
  {
    int flag = -1;
    max = d;
    min = *this;
  }
  int n = 0;
  while (min != max)
  {
    ++min;
    ++n;
  }
  return n * flag;
}

7.3 test.cpp

#define _CRT_SECURE_NO_WARNINGS 1
#include "Date.h"
int main()
{
  Date d1(2024, 1, 29);
  Date d2 = d1 + 20;
  d2.Print();
  d1.Print();
  d2 -= 20;
  d2.Print();
  d1 += 30000;
  d1.Print();
  ++d1;
  d1.operator++();
  d1.Print();
  d1++;
  d1.operator++(10);
  d1.Print();
  /*bool ret = false;
  if (ret)
  {
    d1.Print();
  }*/
  Date d4(2024, 1, 29);
  Date d5(2024, 8, 1);
  cout << d5 - d4 << endl;
  return 0;
}

以上就是本篇文章的所有内容,在此感谢大家的观看!这里是店小二呀C++笔记,希望对你在学习C++语言旅途中有所帮助!

相关文章
|
6天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
29 4
|
7天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
25 4
|
30天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
27 4
|
30天前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
23 4
|
30天前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
21 1
|
1月前
|
存储 编译器 C语言
【C++打怪之路Lv3】-- 类和对象(上)
【C++打怪之路Lv3】-- 类和对象(上)
16 0
|
1月前
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)
|
1月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
1月前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
23 3