Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Pohrana {
- protected:
- string ime;
- double tezinaStvari;
- public:
- Pohrana (string ime, double tezina) : ime(ime), tezinaStvari(tezina) {};
- virtual Pohrana *DajKopiju () const = 0;
- virtual string dajIme () const = 0;
- virtual double dajTezinu () const = 0;
- virtual void Ispisi () const = 0;
- };
- class Sanduk : public Pohrana {
- double tezinaSanduka;
- int maxBrojPredmeta;
- public:
- Sanduk (string ime, double tezinaPredmeta) : Pohrana(ime, tezinaPredmeta) {tezinaSanduka+=tezinaPredmeta;} ;
- double dajTezinuSanduka () const {return tezinaSanduka;}
- double dajTezinu() const override {return tezinaStvari;}
- string dajIme () const override {return ime;}
- Pohrana *DajKopiju() const override {return new Sanduk(*this);}
- void Ispisi() const override { cout << ime << " " << tezinaStvari << "KG\n";}
- };
- class Bure : public Pohrana {
- double bureTezina;
- int maxPredmeta;
- public:
- explicit Bure (string ime, double tezinaTecnosti) : Pohrana(ime, tezinaTecnosti) {bureTezina+=tezinaTecnosti;};
- double dajTezinuBureta () const {return bureTezina;}
- double dajTezinu() const override {return tezinaStvari;}
- string dajIme () const override {return ime;}
- Pohrana *DajKopiju () const override {return new Bure(*this);}
- void Ispisi() const override { cout << ime << " " << tezinaStvari << " l\n";}
- };
- class Skladiste {
- Pohrana **itemi;
- int maxBrojPredmeta, trenutnoStanje;
- public:
- explicit Skladiste (int brojPredmeta) : maxBrojPredmeta(brojPredmeta), trenutnoStanje(0), itemi(new Pohrana*[brojPredmeta]{}) {};
- ~Skladiste ();
- Skladiste (const Skladiste &s);
- Skladiste& operator= (const Skladiste &s);
- Skladiste (Skladiste &&s) : itemi(s.itemi), maxBrojPredmeta(s.maxBrojPredmeta), trenutnoStanje(s.trenutnoStanje) {itemi = nullptr; trenutnoStanje = 0;}
- Skladiste& operator=(Skladiste &&s);
- Skladiste& NajteziPredmet ();
- Skladiste& NajlaksiPredmet ();
- int DajBrojPredmeta () const { return trenutnoStanje;}
- void DodajStvarStanduk (string ime, double tezinaPredmeta);
- void DodajStvarBure (string ime, double tezinaTecnosti);
- void IspisiStvariSkladiste() const;
- };
- Skladiste& Skladiste::NajlaksiPredmet() {
- double indeksNajmanjeg = 0, najlaksi = 0;
- for (int i=0; i<trenutnoStanje; i++) {
- if (itemi[i]->dajTezinu() < najlaksi) {
- najlaksi = itemi[i]->dajTezinu();
- indeksNajmanjeg = i;
- }
- }
- return *itemi[indeksNajmanjeg]->dajTezinu();
- }
- Skladiste& Skladiste::NajteziPredmet() {
- double indeksNajtezeg = 0, najtezi = 0;
- for (int i=0; i<trenutnoStanje; i++) {
- if (itemi[i]->dajTezinu() > najtezi) {
- najtezi = itemi[i]->dajTezinu();
- indeksNajtezeg = i;
- }
- }
- return *itemi[indeksNajtezeg]->dajTezinu();
- }
- Skladiste& Skladiste::operator=(Skladiste &&s) {
- swap(itemi, s.itemi); swap(maxBrojPredmeta, s.maxBrojPredmeta);
- swap(trenutnoStanje, s.trenutnoStanje);
- return *this;
- }
- Skladiste::Skladiste(const Skladiste &s) : itemi(new Pohrana*[s.maxBrojPredmeta]), maxBrojPredmeta(s.maxBrojPredmeta), trenutnoStanje(s.trenutnoStanje) {
- try {
- for (int i=0; i<s.maxBrojPredmeta; i++)
- itemi[i] = s.itemi[i]->DajKopiju();
- }
- catch(...) {
- for (int i=0; i<s.maxBrojPredmeta; i++)
- delete itemi[i];
- }
- }
- Skladiste& Skladiste::operator=(const Skladiste &s) {
- Pohrana **noviProstor(new Pohrana*[s.maxBrojPredmeta]{});
- try {
- for (int i=0; i<s.maxBrojPredmeta; i++)
- noviProstor[i] = s.itemi[i]->DajKopiju();
- }
- catch(...) {
- for (int i=0; i<s.maxBrojPredmeta; i++)
- delete noviProstor[i];
- delete [] noviProstor;
- }
- for (int i=0; i<maxBrojPredmeta; i++)
- delete itemi[i];
- delete [] itemi;
- itemi = noviProstor;
- return *this;
- }
- Skladiste::~Skladiste() {
- for (int i=0; i<maxBrojPredmeta; i++)
- delete itemi[i];
- delete [] itemi;
- }
- void Skladiste::IspisiStvariSkladiste() const {
- for (int i=0; i<trenutnoStanje; i++)
- itemi[i]->Ispisi();
- }
- void Skladiste::DodajStvarStanduk(string ime, double tezinaPredmeta) {
- if (trenutnoStanje == maxBrojPredmeta)
- throw range_error ("Sanduk je popunjen!");
- itemi[trenutnoStanje++] = new Sanduk(ime, tezinaPredmeta);
- }
- void Skladiste::DodajStvarBure(string ime, double tezinaTecnosti) {
- if (trenutnoStanje == maxBrojPredmeta)
- throw range_error ("Bure je popunjeno!");
- itemi[trenutnoStanje++] = new Bure(ime, tezinaTecnosti);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement