利用运算符重载实现Date类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用运算符重载实现Date类相关的知识,希望对你有一定的参考价值。

运算符重载:

重载,就是重新赋予新的含义。运算符重载的方法是定义一个重载运算符的函数,使指定的运算符不仅能实现原有的,而且能实现在函数中指定的新的功能。在使用被重载的运算符时,系统会自动调用该函数,以实现相应的功能。即运算符重载实质是函数的重载。

重载运算符的格式如下:

函数类型 operator 运算符名称(形参表)

{

对运算符的重载处理

}

c++中绝大多数的运算符容许重载,不能重载的运算符只有5个:即

. (成员访问运算符)

* (成员指针访问运算符)

:: (域运算符)

sizeof (长度运算符)

?: (条件运算符)

例:创建一个Date类,实现日期+天数=日期,日期-天数=日期。

#define _CRT_SECURE_NO_WARNING 1

#include<iostream>

using namespace std;

class Date

{

public:

 Date(int year = 1900, int month = 1, int day = 1)

  :_year(year)

  , _month(month)

  , _day(day)

 {}

 int DayInMonth(Date &d)

 {

  int dys[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

  if ((_year % 4 == 0 && _year % 100 != 0) || (_year % 400 == 0))

  {

   dys[2] = 29;

  }

  return dys[d._month];

 }

 Date operator+(int day)

 {

  Date d1 = *this;

  d1._day += day;

  while (d1._day> DayInMonth(d1))

  {

   d1._day -= DayInMonth(d1);

   d1._month++;

   if (d1._month == 13)

   {

    d1._month = 1;

    d1._year++;

   }

  }

  return d1;

 }

 Date operator-(int day)

 {

  Date d1 = *this;

  d1._day -= day;

  while (d1._day <= 0)

  {

   d1._month--;

   d1._day += DayInMonth(d1);

   if (d1._month < 1)

   {

    d1._month = 12;

    d1._year--;

   }

  }

  return d1;

 }

 bool operator<(Date &d)

 {

  Date d1 = *this;

  if (d1._year < d._year)

  {

   return true;

  }

  if (d1._year == d._year &&d1._month < d._month)

  {

   return true;

  }

  if (d1._year == d._year&&d1._month == d._month&&d1._day < d._day)

  {

   return true;

  }

  return false;

 }

 int operator-(Date &d)

 {

  int day = 1;

  Date d1;

  while (d1 < d)

  {

   operator+(day);

   day++;

   if (d._year == _year&&d._month == _month&&d._day == _day)

   {

    break;

   }

  }

  return day;

 }

 void show()

 {

  cout << _year << "-" << _month << "-" << _day << endl;

 }

private:

 int _year;

 int _month;

 int _day;

};

int main()

{

 Date d1(2016, 1, 1);

 Date d2,d3;

 int days = 32;

 int day = 0;

 d2 = d1 + days;

 d3 = d1 - days;

 cout << "date+days" << endl;

 d2.show();

 cout << "date-days" << endl;

 d3.show();


 system("pause");

 return 0;

}

 

本文出自 “朔月云影” 博客,请务必保留此出处http://19940325.blog.51cto.com/10789287/1747481

以上是关于利用运算符重载实现Date类的主要内容,如果未能解决你的问题,请参考以下文章

[ C++ ] 类与对象(下)日期类Date补充及流提取和流插入运算符重载

[C++]——日期类运算符的重载(针对Date类重载<,>,<=,>=,==,++,<<,>>运算符,并构建排序函数,将时间进行升序排序)

[C++]——日期类运算符的重载(针对Date类重载<,>,<=,>=,==,++,<<,>>运算符,并构建排序函数,将时间进行升序排序)

C++类和对象 - 日期类的实现

C++类和对象 - 日期类的实现

C++类和对象 - 日期类的实现