#include #include using namespace std; class Vozilo { public: virtual string Vrsta() const { return "nemamo pojma"; } virtual int BrojVrata() const { return 4; } virtual int BrojTockova() const { return 4; } virtual int BrojSedista() const { return 4; } }; class Automobil : public Vozilo { public: string Vrsta() const { return "Automobil"; } int BrojVrata() const { return 4; } int BrojTockova() const { return 4; } int BrojSedista() const { return 4; } }; class Kamion : public Vozilo { public: string Vrsta() const { return "Kamion"; } int BrojVrata() const { return 2; } int BrojTockova() const { return 6; } int BrojSedista() const { return 3; } }; // klase hijerarhije Vozilo moraju se upotrebljavati // ISKLJUCIVO putem pokazivaca ili referenci class Perionica { public: Perionica() : prvoVozilo(0), prvoSlobodnoMesto(0) {} void DodajVoziloURed( Vozilo* v ) { int narednoSlobodnoMesto = (prvoSlobodnoMesto + 1) % max_vozila; if( prvoVozilo == narednoSlobodnoMesto ) cout << "Nema vise mesta, vozilo je otislo u drugu perionicu." << endl; else{ red[prvoSlobodnoMesto] = v; prvoSlobodnoMesto = narednoSlobodnoMesto; } } bool ImaVozilaURedu() const { return prvoVozilo != prvoSlobodnoMesto; } Vozilo* IzdvojiPrvoVozilo() { Vozilo* v = red[prvoVozilo]; prvoVozilo = (prvoVozilo + 1) % max_vozila; return v; } void OperiPrvoVozilo() { if( ImaVozilaURedu() ){ Vozilo* v = IzdvojiPrvoVozilo(); cout << "Na redu je jedan " << v->Vrsta() << "." << endl; cout << "Prvo peremo vrata, ima ih " << v->BrojVrata() << endl; cout << "Zatim prelazimo na tockove, ima ih " << v->BrojTockova() << endl; cout << "Sada su na redu sedista, njih " << v->BrojSedista() << endl; cout << "Gotovo, za sada." << endl; } } private: static const int max_vozila = 300; Vozilo* red[max_vozila]; int prvoVozilo; int prvoSlobodnoMesto; }; main(){ Perionica kodZike; kodZike.DodajVoziloURed( new Automobil() ); kodZike.DodajVoziloURed( new Kamion() ); while( kodZike.ImaVozilaURedu() ){ kodZike.OperiPrvoVozilo(); cout << endl; } return 0; }