运算符重载

要求:

    用成员函数重载DateTime类的运算符 +, -, 大于, 小于, == 和++, --(包含前置和后置)

 

代码记录:

DateTime.h

#pragma once
#include"_TimeSpan.h"
#include<iostream>
#include<ctime>
using namespace std;
class _TimeSpan; class DateTime { public: DateTime(int a,int b,int c); DateTime(void); string toString(); void showTime(); static DateTime Now(); DateTime operator+(const _TimeSpan& d2) const; _TimeSpan operator-(const DateTime& d2)const; int operator>(const DateTime& d2)const; int operator<(const DateTime& d2)const; int operator==(const DateTime& d2)const; DateTime& operator++(); DateTime operator++(int); DateTime& operator--(); DateTime operator--(int); ~DateTime(void); private: int year; int month; int day; };

DateTime.cpp

#include "DateTime.h"
DateTime::DateTime(int a,int b,int c):year(a),month(b),day(c)
{
}
DateTime::DateTime(void){
 
}
void DateTime::showTime()
{
     cout<<year<<""<<month<<""<<day<<""<<endl;
}
DateTime DateTime::Now()
{
 
    time_t tickNow = time(NULL);
    tm * tmNow = localtime(&tickNow);
    int year = tmNow->tm_year;
    int mon = tmNow->tm_mon;
    int day = tmNow->tm_mday;
    DateTime a(year,mon,day);
    return a;
}
DateTime DateTime::operator+(const _TimeSpan &d2)const
{
    return DateTime(year+d2.year,month+d2.month,day+d2.day);
}
_TimeSpan DateTime::operator-(const DateTime &d2)const
{
    return _TimeSpan(year-d2.year,month-d2.month,day-d2.day);
}
int DateTime::operator>(const DateTime &d2)const
{
    if(year>d2.year)
        return 1;
    else if(year==d2.year&&month>d2.month)
        return 1;
    else if(year==d2.year&&month==d2.month&&day>d2.day)
        return 1;
    else return 0;
}
int DateTime::operator<(const DateTime &d2)const
{
    if(year<d2.year)
        return 1;
    else if(year==d2.year&&month<d2.month)
        return 1;
    else if(year==d2.year&&month==d2.month&&day<d2.day)
        return 1;
    else
        return 0;
}
int DateTime::operator==(const DateTime &d2)const
{
     
    if(year==d2.year&&month==d2.month&&day==d2.day)
        return 1;
    else
        return 0;
}
DateTime& DateTime::operator++()
{
    day++;
    if(day>=30){
        day-=30;
        month++;
        if(month>=12){
            month-=12;
            year=(year+1)%12;
        }
    }
    return *this;
}
DateTime DateTime::operator++(int)
{
    DateTime old=*this;
    ++(*this);
    return old;
}
DateTime& DateTime::operator--()
{
    day--;
    if(day<=0){
        day+=30;
        month--;
        if(month<=12){
            month+=12;
            year=(year-1)%12;
        }
    }
    return *this;
}
DateTime DateTime::operator--(int)
{
    DateTime old=*this;
    --(*this);
    return old;
}
DateTime::~DateTime(void)
{
}

_TimeSpan.h

#pragma once
#include<iostream>
#include"DateTime.h"
using namespace std;
class _TimeSpan
{
public:
    _TimeSpan(int a,int b,int c);
    _TimeSpan(void);
    friend class DateTime;
    int Getyears();
    int Getmonths();
    int Getdays();
    ~_TimeSpan(void);
protected:
    int year,month,day;

_TimeSpan.cpp

#include "_TimeSpan.h"
 
_TimeSpan::_TimeSpan(int a,int b,int c):year(a),month(b),day(c)
{
}
_TimeSpan::_TimeSpan(void){
}
 
 
int _TimeSpan::Getyears(){
        return year;
    };
int _TimeSpan::Getmonths(){
        return month;   
    };
int _TimeSpan::Getdays(){
        return day; 
    };
 
_TimeSpan::~_TimeSpan(void)
{
}

main.cpp

#include"_TimeSpan.h"
#include"DateTime.h"int main()
{
    DateTime d1,d2,d3;
    d1=DateTime::Now();
    d2=DateTime::Now();
    d1.showTime();
    d2.showTime();
 
    _TimeSpan s1;
    s1=d1-d2;
    d1++;
    --d2;
    d3=d1+s1;
    d3.showTime();
 
    if(d3 == d2)
    {
    cout <<"d3==d2"<<endl;
    }
    else if(d3 > d2)
    {
    cout <<"d3 > d2"<<endl;
    }
    return 0;
}

 

posted @ 2015-06-06 23:48  Daniel_Yi  阅读(229)  评论(0编辑  收藏  举报