// datum.cpp

#include<iostream>
using namespace std

short Datum::dana_u_mesecu()const{
	return uzmiDan(this);
}
short Datum::dana_u_godini()const{
	int dana=0,n=0; 
	if(this->prestupna) n=1;
	dana=this->dana_u_mesecu();
	for(int m=0,m<uzmiMes(this)-1,m++){
		dana+=Datum::niz[n][m];
	return this->dana_u_mesecu+dana;

	}
}
bool operator>(Datum& t,Datum& n){
/*	short g=uzmiGod(t);
	short dodaj=0;
	int tek=0,novi=0;
	if((g%4==0 && g%100!=0) || g%400==0)
		dodaj=1;
*/
	return ((t.dana_u_godini()>n.dana_u_godini()) && (uzmiGod(t)>uzmiGod(n));
}



// datum.h
#include<iostream>
#include"datum.h"
using namespace std;
#ifndef _DATUM_H_
#define _DATUM_H_

class Datum {
	int dan,mesec,godina;
	static const short niz[][12]={
							{31,28,31,30,31,30,31,31,30,31,30,31},
							 {31,29,31,30,31,30,31,31,30,31,30,31}
	};
public:
	Datum(short d,short m,short g){
		dan=d;
		mesec=m;
		godina=g;
	};
	explicit Datum();
	friend short uzmiDan(Datum& d) {return dan;}
	friend short uzmiMes(Datum& m) {return mesec;}
	friend short UzmiGod(Datum& g) {return godina;}
	bool prestupna()const{ return ((this->godina%4==0 && this->godina%100!=0) || this->godina%400==0 };
	short dana_u_mesecu()const;
	short dana_u_godini()const;
	Datum& operator++ (){
		++dan;
		return *this;
	}
	Datum& operator-- (){
		--dan;
		return *this;
	}
	Datum& operator++ (int){Datum d (*this); dan++; return *d;}
	Datum& operator-- (int){Datum d (*this); dan--; return *d;}
	
	Datum& operator+= (short brdana){
		dan+=brdana;
		return *this;
	}
	Datum& operator-= (short brdana){
		dan-=brdana;
		return *this;
	}
	friend bool operator== (Datum& t,Datum& n){
		return(uzmiDan(t)==uzmiDan(n) && uzmiMes(t)==uzmiMes(n) && uzmiGod(t)==uzmiGod(n) )
	}
	friend bool operator> (Datum& t,Datum& n);
	friend istream& operator>> (istream& ulaz,const Datum& d){
		return ulaz>> d.dan >> d.mesec >> d.godina;
	}
	friend istream& operator<< (istream& izlaz,const Datum& d){
		return izlaz<< d.dan <<" "<< d.mesec <<" "<< d.godina<<endl;
	}

}
#endif


