/**************/ /* laskuri.c */ #include #include #include #include class cKulkuneuvo { const char *nimi; int lkm; public: cKulkuneuvo(const char *n="",int kpl=0) : nimi(n), lkm(kpl) {} const char *getNimi() const { return nimi; } const int getLkm() const { return lkm; } void setLkm(const int i) { lkm = i; } void lisaa(int i=1) { lkm = lkm + i; } void nollaa() { lkm = 0; } const char getN(void) { return toupper(nimi[0]); } }; class cKulkuneuvot { cKulkuneuvo **kulkuneuvot; int k_lkm; int max; int luo_taulukko(int max); int poista_kaikki(void); void operator=(const cKulkuneuvot &ku) {} public: cKulkuneuvot(int Max=50, int klkm=0) : k_lkm(klkm), max(Max) { luo_taulukko(Max); } ~cKulkuneuvot() { poista_kaikki(); } int lisaa(const cKulkuneuvo &uusi); int getLkm(int i) { return kulkuneuvot[i]->getLkm(); } int getK_lkm() { return k_lkm; } const char *getNimi(int i) { return kulkuneuvot[i]->getNimi(); } void lisaa_lkm(const char c); void nollaa(void); }; class cNaytto{ cKulkuneuvot *pointteriK; public: cNaytto(cKulkuneuvot *k) /*: pointteriK(k)*/ { pointteriK = k; } void nayta_kulkuneuvot(void); void piirra_naytto(void); }; int cKulkuneuvot::luo_taulukko(int max) { if ( max <= 0 ) return 2; kulkuneuvot = new cKulkuneuvo* [max]; if ( !kulkuneuvot ) return 2; return 0; } int cKulkuneuvot::poista_kaikki(void) { for ( int i=0; i 0 ) delete [] kulkuneuvot; return 0; } int cKulkuneuvot::lisaa(const cKulkuneuvo &uusi) { cKulkuneuvo *uk; if ( k_lkm >= max ) return 1; uk = new cKulkuneuvo(uusi); // Copy constructor if ( uk == NULL ) return 1; kulkuneuvot[k_lkm] = uk; k_lkm++; return 0; } void cKulkuneuvot::nollaa(void) { for(int i=0; inollaa(); } void cKulkuneuvot::lisaa_lkm(const char c) { for(int i=0; igetN() == toupper(c) ) kulkuneuvot[i]->lisaa(); if ( 'N' == toupper(c) ) nollaa(); } void cNaytto::piirra_naytto(void) { char c; // cKulkuneuvo lada ("lada", 1); // cKulkuneuvo skoda("skoda", 2); pointteriK->lisaa(cKulkuneuvo("lada", 1)); pointteriK->lisaa(cKulkuneuvo("skoda", 2)); while (1) { clrscr(); printf("\n" " Ohjelmalla lasketaan kuorma- ja henkil”autojen lukum„„ri„\n" " sit„ mukaa kun ne ajavat ohi.\n" "\n" " K„ytt”ohje: L - lisää Ladoja\n" " S - lisää Skodia\n" " N - nollaa molemmat laskurit\n" " X - lopettaa ohjelman\n" "\n\n"); nayta_kulkuneuvot(); c = getch(); pointteriK->lisaa_lkm(c); if ( toupper(c) == 'X' ) return; } } void cNaytto::nayta_kulkuneuvot(void) { for(int i=0; igetK_lkm(); i++) cout << pointteriK->getNimi(i) << " " << pointteriK->getLkm(i) << endl; } /****************************************************************************/ int main(void) { cKulkuneuvot kulkuneuvoja(100); cNaytto naytto(&kulkuneuvoja); naytto.piirra_naytto(); return 0; }