// aikaclaD.cpp - sisäinen toteutus minuutteina #include #include class cAika { int yht_min; public: virtual void aseta(int ih=0,int im=0, int is=0) { yht_min = 0; lisaa(60*ih+im); } cAika() { yht_min = 0; } cAika(int ih, int im=0) { aseta(ih,im); } virtual void lisaa(int lisa_min, int lisa_sek=0) { yht_min += lisa_min; } virtual void tulosta(int lf=1) const { cout << setfill('0') << setw(2) << hh() << ":" << setw(2) << mm(); if ( lf ) cout << endl; } int hh() const { return yht_min / 60; } int mm() const { return yht_min % 60; } }; class cAikaSek : public cAika { int s; public: virtual void aseta(int ih=0, int im=0, int is=0) { s = is; cAika::aseta(ih,im); lisaa(0); } cAikaSek() : s(0), cAika() {} // Oletusmuodostaja cAikaSek(int ih, int im=0, int is=0) : cAika(ih,im), s(is) { lisaa(0); } virtual void lisaa(int lisa_min, int lisa_sek=0) { s += lisa_sek; cAika::lisaa(lisa_min+s/60); s %= 60; } virtual void tulosta(int lf=1) const { cAika::tulosta(0); cout << ":" << setw(2) << s; if ( lf ) cout << endl; } int ss() const { return s; } }; int main(void) { cAika a1, a2(13), a3(14,175); a1.tulosta(); a2.tulosta(); a3.tulosta(); a1.aseta(12,15); a2.aseta(16,-15); a1.tulosta(); a2.tulosta(); cAikaSek a4(12,55,45); a4.tulosta(1); // lisätty uusi a4.lisaa(3,30); a4.tulosta(1); cAika *pAika; pAika = &a1; pAika->tulosta(); pAika = &a4; pAika->tulosta(); cout << a1.hh() << ":" << pAika->mm() << ":" << a4.ss() << endl; return 0; }