利用运算符重载实现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;

}

 

你可能感兴趣的:(运算符,重载)