#include <iostream>
using namespace std ;
class myDate
{
public :
myDate() ;
myDate(int X) ;
myDate( int year, int month, int day) ;
int dayOfYear() ;
bool isLeap(int year) ;
int Year() ;
int Month() ;
int Day() ;
friend const int operator -(const myDate& day1 , const myDate& day2) ;
private :
int YEAR ;
int MONTH ;
int DAY ;
int A ;
} ;
int main()
{
myDate D1() , D2(2015,12,31) , D3(2016,3,1) ;
int X ;
X = D2 - D3 ;
cout<<"D2 : "<<D2.dayOfYear()<<endl ;
cout<<"D3 : "<<D3.dayOfYear()<<endl ;
cout<<endl<<X ;
}
myDate::myDate() : YEAR(0) , MONTH(0) , DAY(0)
{}
myDate::myDate( int year, int month, int day) : YEAR(year) , MONTH(month) , DAY(day)
{}
int myDate::Day()
{
return DAY ;
}
bool myDate::isLeap(int year)
{
if( year % 400 == 0 )
return 1 ;
else if( year % 4 == 0 && year % 100 != 0 )
return 1 ;
else
return 0 ;
}
int myDate::dayOfYear()
{
int x = 0 ;
switch(MONTH-1)
{
case 12 : x+=31 ;
case 11 : x+=30 ;
case 10 : x+=31 ;
case 9 : x+=30 ;
case 8 : x+=31 ;
case 7 : x+=31 ;
case 6 : x+=30 ;
case 5 : x+=31 ;
case 4 : x+=30 ;
case 3 : x+=31 ;
case 2 :
{
if(isLeap(YEAR) == true)
x+=29 ;
if(isLeap(YEAR) == false)
x+=28 ;
}
case 1 : x+=31 ;
}
x=x+DAY ;
return x ;
}
const int operator -(const myDate& day1 , const myDate& day2)
{
myDate DATE ;
int x,y,z,LeaPz = 0 ;
int i ;
int X ;
x = day1.dayOfYear() ;
y = day2.dayOfYear() ;
if( day1.YEAR == day2.YEAR )
{
X = x-y ;
if(X < 0)
X = -X ;
}
if( day1.YEAR - day2.YEAR > 0 )
{
z = day1.YEAR - day2.YEAR - 1 ;
for( i = day2.YEAR ; i < day1.YEAR ; i++ )
{
if( DATE.isLeap(i) ==1 )
LeaPz ++ ;
}
if(DATE.isLeap(day2.YEAR) ==1 )
X = (366-y) + x + 365*(z-LeaPz) + 366*LeaPz ;
else
X = (365-y) + x + 365*(z-LeaPz) + 366*LeaPz ;
}
if( day1.YEAR - day2.YEAR < 0 )
{
z = day2.YEAR - day1.YEAR - 1 ;
for( i = day1.YEAR ; i < day2.YEAR ; i++ )
{
if( DATE.isLeap(i) ==1 )
LeaPz ++ ;
}
if(DATE.isLeap(day1.YEAR) == 1 )
X = (365-x) + y + 365*(z-LeaPz) + 366*LeaPz ;
else
X = (365-x) + y + 365*(z-LeaPz) + 366*LeaPz ;
}
return X ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZCA7CgpjbGFzcyBteURhdGUKewoJcHVibGljIDoKCQlteURhdGUoKSA7CgkJbXlEYXRlKGludCBYKSA7CgkJbXlEYXRlKCBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KSA7CgkJaW50IGRheU9mWWVhcigpIDsKCQlib29sIGlzTGVhcChpbnQgeWVhcikgOwoJCWludCBZZWFyKCkgOwoJCWludCBNb250aCgpIDsKCQlpbnQgRGF5KCkgOwoJCWZyaWVuZCBjb25zdCBpbnQgb3BlcmF0b3IgLShjb25zdCBteURhdGUmIGRheTEgLCBjb25zdCBteURhdGUmIGRheTIpIDsJCglwcml2YXRlIDoJCgkJaW50IFlFQVIgOwoJCWludCBNT05USCA7CgkJaW50IERBWSA7CgkJaW50IEEgOwkKfSA7CgppbnQgbWFpbigpCnsKCW15RGF0ZSBEMSgpICwgRDIoMjAxNSwxMiwzMSkgLCBEMygyMDE2LDMsMSkgOwoJCglpbnQgWCA7CgkKCVggPSBEMiAtIEQzIDsKCQoJY291dDw8IkQyIDogIjw8RDIuZGF5T2ZZZWFyKCk8PGVuZGwgOwoJCgljb3V0PDwiRDMgOiAiPDxEMy5kYXlPZlllYXIoKTw8ZW5kbCA7CgkKCWNvdXQ8PGVuZGw8PFggOwkKfQoKbXlEYXRlOjpteURhdGUoKSA6IFlFQVIoMCkgLCBNT05USCgwKSAsIERBWSgwKSAKe30KCm15RGF0ZTo6bXlEYXRlKCBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KSA6IFlFQVIoeWVhcikgLCBNT05USChtb250aCkgLCBEQVkoZGF5KSAKe30KCmludCBteURhdGU6OkRheSgpCnsKCXJldHVybiBEQVkgOwp9Cgpib29sIG15RGF0ZTo6aXNMZWFwKGludCB5ZWFyKSAgCnsKICAgICBpZiggeWVhciAlIDQwMCA9PSAwICkKICAgICAgICAgIHJldHVybiAxIDsKICAgICBlbHNlIGlmKCB5ZWFyICUgNCA9PSAwICYmIHllYXIgJSAxMDAgIT0gMCApCiAgICAgICAgICByZXR1cm4gMSA7CiAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIDAgOwp9CgppbnQgbXlEYXRlOjpkYXlPZlllYXIoKQp7CglpbnQgeCA9IDAgOwoJCQoJc3dpdGNoKE1PTlRILTEpCgl7CgkJY2FzZSAxMiA6IHgrPTMxIDsgCgkJY2FzZSAxMSA6IHgrPTMwIDsKCQljYXNlIDEwIDogeCs9MzEgOwoJCWNhc2UgOSA6IHgrPTMwIDsKCQljYXNlIDggOiB4Kz0zMSA7CgkJY2FzZSA3IDogeCs9MzEgOwoJCWNhc2UgNiA6IHgrPTMwIDsKCQljYXNlIDUgOiB4Kz0zMSA7CgkJY2FzZSA0IDogeCs9MzAgOwoJCWNhc2UgMyA6IHgrPTMxIDsKCQljYXNlIDIgOiAKCQl7CgkJCWlmKGlzTGVhcChZRUFSKSA9PSB0cnVlKQoJCQkJeCs9MjkgOwoJCQlpZihpc0xlYXAoWUVBUikgPT0gZmFsc2UpCgkJCQl4Kz0yOCA7CQoJCX0KCQljYXNlIDEgOiB4Kz0zMSA7Cgl9IAoJCQoJCXg9eCtEQVkgOwoJCQoJCXJldHVybiB4IDsJCQp9Cgpjb25zdCBpbnQgb3BlcmF0b3IgLShjb25zdCBteURhdGUmIGRheTEgLCAgY29uc3QgbXlEYXRlJiBkYXkyKQp7CglteURhdGUgREFURSA7CgkKCWludCB4LHkseixMZWFQeiA9IDAgOwoJCglpbnQgaSA7CgkKCWludCBYIDsKCQoJeCA9IGRheTEuZGF5T2ZZZWFyKCkgOwoJeSA9IGRheTIuZGF5T2ZZZWFyKCkgOwoJCglpZiggZGF5MS5ZRUFSID09IGRheTIuWUVBUiApCgl7CgkJWCA9IHgteSA7CgkJaWYoWCA8IDApCgkJCVggPSAtWCA7Cgl9CgkKCWlmKCBkYXkxLllFQVIgLSBkYXkyLllFQVIgPiAwICkKCXsKCQl6ID0gZGF5MS5ZRUFSIC0gZGF5Mi5ZRUFSIC0gMSA7CgkJCgkJZm9yKCBpID0gZGF5Mi5ZRUFSIDsgaSA8IGRheTEuWUVBUiA7IGkrKyApCgkJewoJCQlpZiggREFURS5pc0xlYXAoaSkgPT0xICkKCQkJCUxlYVB6ICsrIDsgCQoJCX0KCQkKCQlpZihEQVRFLmlzTGVhcChkYXkyLllFQVIpID09MSApCgkJCVggPSAoMzY2LXkpICsgeCArIDM2NSooei1MZWFQeikgKyAzNjYqTGVhUHogOwoJCgkJZWxzZQoJCQlYID0gKDM2NS15KSArIHggKyAzNjUqKHotTGVhUHopICsgMzY2KkxlYVB6IDsJCgl9CgkKCWlmKCBkYXkxLllFQVIgLSBkYXkyLllFQVIgPCAwICkKCXsKCQl6ID0gZGF5Mi5ZRUFSIC0gZGF5MS5ZRUFSIC0gMSA7CgoJCWZvciggaSA9IGRheTEuWUVBUiA7IGkgPCBkYXkyLllFQVIgOyBpKysgKQoJCXsKCQkJaWYoIERBVEUuaXNMZWFwKGkpID09MSApCgkJCQlMZWFQeiArKyA7IAkKCQl9CgkJCQkKCQlpZihEQVRFLmlzTGVhcChkYXkxLllFQVIpID09IDEgKQoJCQlYID0gKDM2NS14KSArIHkgKyAzNjUqKHotTGVhUHopICsgMzY2KkxlYVB6IDsgCgkJCQkgIAoJCWVsc2UKCQkJWCA9ICgzNjUteCkgKyB5ICsgMzY1Kih6LUxlYVB6KSArIDM2NipMZWFQeiA7CQoJfQoJcmV0dXJuIFggOwkKfQ==
prog.cpp: In function 'const int operator-(const myDate&, const myDate&)':
prog.cpp:101:21: error: passing 'const myDate' as 'this' argument of 'int myDate::dayOfYear()' discards qualifiers [-fpermissive]
x = day1.dayOfYear() ;
^
prog.cpp:102:21: error: passing 'const myDate' as 'this' argument of 'int myDate::dayOfYear()' discards qualifiers [-fpermissive]
y = day2.dayOfYear() ;
^