구현 날짜 클래스
날짜+일수=날짜;
날짜-일수=날짜;
날짜-날짜=일수;
이 날짜류를 실현하려면 반드시 연산자 중재의 개념과 실현 방법을 숙련해야 한다.
작성된 날짜 클래스는 다음과 같습니다.
헤더 파일:
#ifndef __DATE_H__
#define __DATE_H__
#include<iostream>
using namespace std;
class Date
{
public:
Date(int year = 1900, int month = 1, int day = 1);
Date(const Date& d);
Date& operator=(const Date& d);
int DaysOfMonth();//
bool IsInvalid();//
bool IsLeapYear();//
void ToCorrectDate();//
Date& operator+=(int days);
Date& operator-=(int days);
friend ostream& operator<<(ostream& output, const Date& d);//
friend bool operator>(const Date& d1, const Date& d2);
friend bool operator>=(const Date& d1, const Date& d2);
friend bool operator<=(const Date& d1, const Date& d2);
friend bool operator<(const Date& d1, const Date& d2);
friend bool operator==(const Date& d1, const Date& d2);
friend bool operator!=(const Date& d1, const Date& d2);
friend Date operator+(const Date& d, int days);// +
friend Date operator-(const Date& d, int days);// -
friend int operator-(const Date& d1, const Date& d2);// -
private:
int _year;
int _month;
int _day;
};
#endif
소스 파일:
Date::Date(int year, int month, int day)//
:_year(year)
, _month(month)
, _day(day)
{
if (IsInvalid())// ,
{
_year = 1900;
_month = 1;
_day = 1;
}
}
Date::Date(const Date& d)//
{
_year = d._year;
_month = d._month;
_day = d._day;
}
Date& Date::operator=(const Date& d)//
{
_year = d._year;
_month = d._month;
_day = d._day;
return *this;
}
int Date::DaysOfMonth()
{
int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; //
if (IsLeapYear())// 29
{
days[2] += 1;
}
return days[_month];
}
bool Date::IsInvalid()
{
if (_year < 1900 || _month < 0 || _month > 12 || _day < 0 || _day > DaysOfMonth())
return true;
else
return false;
}
bool Date::IsLeapYear()
{
return (_year % 4 == 0 && _year % 100 != 0) || _year % 400 == 0;
}
ostream& operator<<(ostream& output, const Date& d)//
{
output << d._year << "-" << d._month << "-" << d._day;
return output;
}
bool operator==(const Date& d1, const Date& d2)
{
return (d1._year == d2._year) && (d1._month == d2._month) && (d1._day == d2._day);
}
bool operator!=(const Date& d1, const Date& d2)
{
return !(d1 == d2);
}
bool operator>(const Date& d1, const Date& d2)
{
if (d1._year > d2._year)
return true;
if (d1._year == d2._year)
{
if (d1._month > d2._month)
return true;
if (d1._month == d2._month)
{
if (d1._day > d2._day)
{
return true;
}
}
}
return false;
}
bool operator>=(const Date& d1, const Date& d2)
{
return (d1 > d2) || (d1 == d2);
}
bool operator<=(const Date& d1, const Date& d2)
{
return !(d1 > d2);
}
bool operator<(const Date& d1, const Date& d2)
{
return !(d1 >= d2);
}
void Date::ToCorrectDate()
{
while (_day <= 0)
{
if (_month == 1)
{
_month = 12;
_year -= 1;
}
else
_month--;
_day += DaysOfMonth();
}
while (_day > DaysOfMonth())
{
_day -= DaysOfMonth();
if (_month == 12)
{
_month = 1;
_year += 1;
}
else
_month++;
}
}
Date operator+(const Date& d, int days)
{
Date d1(d);
d1._day += days;
d1.ToCorrectDate();
return d1;
}
Date& Date::operator+=(int days)
{
_day += days;
ToCorrectDate();
return *this;
}
Date operator-(const Date& d, int days)
{
Date d1(d);
d1._day -= days;
d1.ToCorrectDate();
return d1;
}
Date& Date::operator-=(int days)
{
_day -= days;
ToCorrectDate();
return *this;
}
int operator-(const Date& d1, const Date& d2)
{
Date MinDate(d1);
Date MaxDate(d2);
int days = 0;
if (d1 > d2)
{
MinDate = d2;
MaxDate = d1;
}
if (d1 < d2)
{
MinDate = d1;
MaxDate = d2;
}
while (MinDate != MaxDate)// ,
{
MinDate += 1;
days++;//
}
return days;
}
테스트 파일:
#include"date.h"
int main()
{
Date d1(2016, 1, 7);
Date d2(2016,1,3);
Date d;
int days = 100;
d = d1 + days;
cout << d1 <<" + "<< days <<": "<< d << endl;
d = d1 - days;
cout << d1 << " - " << days << ": " << d << endl;
days = d1 - d2;
cout <<d1 <<" - "<< d2<<": "<<days<< endl;
getchar();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.