/* pvm2.cpp */ // Malliohjelma p„iv„m„„r„n k„ytt„mises„/ vl-97 #include #include #include #include //--------------------------------------------------------------------------- // P„iv„m„„r„-luokka, mukana vain p„iv„ykseen liittyv„ class cPvm { private: int pv; int kk; int vv; public: const cPvm &paivays() { // Palautetaan nykyinen p„iv„m„„r„ pv = 24; kk = 2; vv = 1997; return *this; } void alusta(int ap=0,int ak=0, int av=0) { paivays(); if ( ap > 0 ) pv = ap; if ( ak > 0 ) kk = ak; if ( av > 0 ) vv = av; } cPvm(int ap=0,int ak=0, int av=0) { alusta(ap,ak,av); } ostream &tulosta(ostream &os = cout) const { char oldf = os.fill('0'); os << setw(2) << pv << "." << setw(2) << kk << "." << setw(4) << vv; os.fill(oldf); return os; } cPvm &operator=(const char *s) { int p=0,k=0,v=0; sscanf(s,"%d.%d.%d",&p,&k,&v); alusta(p,k,v); return *this; } // Lis„tty saantimetodit: int get_pv() const { return pv; } int skk() const { return kk; } int VV() const { return vv; } int vertaa(const cPvm &pvm2) const { if ( VV() < pvm2.VV() ) return -1; if ( vv > pvm2.vv ) return 1; if ( kk < pvm2.kk ) return -1; if ( kk > pvm2.kk ) return 1; if ( pv < pvm2.pv ) return -1; if ( pv > pvm2.pv ) return 1; return 0; } // Operaattoreita voi tehd„ joko luokan "metodeiksi" ... int operator!=(const cPvm &pvm2) const { return vertaa(pvm2) != 0; } int operator>(const cPvm &pvm2) const { return vertaa(pvm2) > 0; } }; // cPvm //--------------------------------------------------------------------------- ostream &operator<<(ostream &os,const cPvm &pvm) { return pvm.tulosta(os); } // 020469A => 20690402 int vertaa(const cPvm &pvm1, const cPvm &pvm2) { if ( pvm1.VV() < pvm2.VV() ) return -1; if ( pvm1.VV() > pvm2.VV() ) return 1; if ( pvm1.KK() < pvm2.KK() ) return -1; if ( pvm1.KK() > pvm2.KK() ) return 1; if ( pvm1.PV() < pvm2.PV() ) return -1; if ( pvm1.PV() > pvm2.PV() ) return 1; return 0; } //... tai operaattoreita voi tehd„ "funktioiksi", Huom! param. m„„r„n muutos! int operator<(const cPvm &pvm1, const cPvm &pvm2) { return vertaa(pvm1,pvm2) < 0; } int operator<=(const cPvm &pvm1, const cPvm &pvm2) { return pvm1.vertaa(pvm2) <= 0; } //--------------------------------------------------------------------------- int main(void) { cPvm tammi97(1,1), maalis97(1,3,97), tanaan; cout << tammi97 << " " << maalis97 << " " << tanaan << endl; cPvm pvm; pvm = "12.1.1995"; cout << pvm << endl; pvm = "13.2" ; cout << pvm << endl; pvm = "14" ; cout << pvm << endl; // a-b < 0 if ( vertaa(tammi97,maalis97) < 0 ) cout << tammi97 << " < " << maalis97 << endl; if ( tammi97.vertaa(maalis97) < 0 ) cout << tammi97 << " < " << maalis97 << endl; if ( vertaa(tanaan,maalis97) != 0 ) cout << tanaan << " != " << maalis97 << endl; if ( tammi97 < maalis97 ) cout << tammi97 << " < " << maalis97 << endl; if ( tanaan != maalis97 ) cout << tanaan << " != " << maalis97 << endl; if ( 1 < 2 ) ... return 0; }