Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.59 KB | None | 0 0
  1. class Pohrana {
  2.     protected:
  3.     string ime;
  4.     double tezinaStvari;
  5. public:
  6.     Pohrana (string ime, double tezina) : ime(ime), tezinaStvari(tezina) {};
  7.     virtual Pohrana *DajKopiju () const = 0;
  8.     virtual string dajIme () const = 0;
  9.     virtual double dajTezinu () const = 0;
  10.     virtual void Ispisi () const = 0;
  11. };
  12.  
  13. class Sanduk : public Pohrana {
  14.     double tezinaSanduka;
  15.     int maxBrojPredmeta;
  16. public:
  17.     Sanduk (string ime, double tezinaPredmeta) : Pohrana(ime, tezinaPredmeta) {tezinaSanduka+=tezinaPredmeta;} ;
  18.     double dajTezinuSanduka () const {return tezinaSanduka;}
  19.     double dajTezinu() const override {return tezinaStvari;}
  20.     string dajIme () const override {return ime;}
  21.     Pohrana *DajKopiju() const override {return new Sanduk(*this);}
  22.     void Ispisi() const override { cout << ime << " " << tezinaStvari << "KG\n";}
  23. };
  24.  
  25. class Bure : public Pohrana {
  26.  double bureTezina;
  27.  int maxPredmeta;
  28. public:
  29.     explicit Bure (string ime, double tezinaTecnosti) : Pohrana(ime, tezinaTecnosti) {bureTezina+=tezinaTecnosti;};
  30.     double dajTezinuBureta () const {return bureTezina;}
  31.     double dajTezinu() const override {return tezinaStvari;}
  32.     string dajIme () const override {return ime;}
  33.     Pohrana *DajKopiju () const override {return new Bure(*this);}
  34.     void Ispisi() const override { cout << ime << " " << tezinaStvari << " l\n";}
  35. };
  36.  
  37. class Skladiste {
  38.     Pohrana **itemi;
  39.     int maxBrojPredmeta, trenutnoStanje;
  40. public:
  41.     explicit Skladiste (int brojPredmeta) : maxBrojPredmeta(brojPredmeta), trenutnoStanje(0), itemi(new Pohrana*[brojPredmeta]{}) {};
  42.     ~Skladiste ();
  43.     Skladiste (const Skladiste &s);
  44.     Skladiste& operator= (const Skladiste &s);
  45.     Skladiste (Skladiste &&s) : itemi(s.itemi), maxBrojPredmeta(s.maxBrojPredmeta), trenutnoStanje(s.trenutnoStanje) {itemi = nullptr; trenutnoStanje = 0;}
  46.     Skladiste& operator=(Skladiste &&s);
  47.     Skladiste& NajteziPredmet ();
  48.     Skladiste& NajlaksiPredmet ();
  49.     int DajBrojPredmeta () const { return trenutnoStanje;}
  50.     void DodajStvarStanduk (string ime, double tezinaPredmeta);
  51.     void DodajStvarBure (string ime, double tezinaTecnosti);
  52.     void IspisiStvariSkladiste() const;
  53. };
  54.  
  55. Skladiste& Skladiste::NajlaksiPredmet() {
  56.      double indeksNajmanjeg = 0, najlaksi = 0;
  57.     for (int i=0; i<trenutnoStanje; i++) {
  58.         if (itemi[i]->dajTezinu() < najlaksi) {
  59.             najlaksi = itemi[i]->dajTezinu();
  60.             indeksNajmanjeg = i;
  61.         }
  62.     }
  63. return *itemi[indeksNajmanjeg]->dajTezinu();
  64. }
  65.  
  66. Skladiste& Skladiste::NajteziPredmet() {
  67.     double indeksNajtezeg = 0, najtezi = 0;
  68.     for (int i=0; i<trenutnoStanje; i++) {
  69.         if (itemi[i]->dajTezinu() > najtezi) {
  70.             najtezi = itemi[i]->dajTezinu();
  71.             indeksNajtezeg = i;
  72.         }
  73.     }
  74. return *itemi[indeksNajtezeg]->dajTezinu();
  75. }
  76.  
  77. Skladiste& Skladiste::operator=(Skladiste &&s) {
  78.     swap(itemi, s.itemi); swap(maxBrojPredmeta, s.maxBrojPredmeta);
  79.     swap(trenutnoStanje, s.trenutnoStanje);
  80. return *this;
  81. }
  82.  
  83. Skladiste::Skladiste(const Skladiste &s) : itemi(new Pohrana*[s.maxBrojPredmeta]), maxBrojPredmeta(s.maxBrojPredmeta), trenutnoStanje(s.trenutnoStanje) {
  84.     try {
  85.         for (int i=0; i<s.maxBrojPredmeta; i++)
  86.             itemi[i] = s.itemi[i]->DajKopiju();
  87.     }
  88.     catch(...) {
  89.         for (int i=0; i<s.maxBrojPredmeta; i++)
  90.             delete itemi[i];
  91.     }
  92. }
  93.  
  94. Skladiste& Skladiste::operator=(const Skladiste &s) {
  95.     Pohrana **noviProstor(new Pohrana*[s.maxBrojPredmeta]{});
  96.     try {
  97.         for (int i=0; i<s.maxBrojPredmeta; i++)
  98.             noviProstor[i] = s.itemi[i]->DajKopiju();
  99.     }
  100.     catch(...) {
  101.         for (int i=0; i<s.maxBrojPredmeta; i++)
  102.             delete noviProstor[i];
  103.         delete [] noviProstor;
  104.     }
  105.     for (int i=0; i<maxBrojPredmeta; i++)
  106.         delete itemi[i];
  107.     delete [] itemi;
  108.     itemi = noviProstor;
  109. return *this;
  110. }
  111.  
  112. Skladiste::~Skladiste() {
  113.     for (int i=0; i<maxBrojPredmeta; i++)
  114.         delete itemi[i];
  115.     delete [] itemi;
  116. }
  117.  
  118. void Skladiste::IspisiStvariSkladiste() const {
  119.     for (int i=0; i<trenutnoStanje; i++)
  120.         itemi[i]->Ispisi();
  121.  
  122. }
  123.  
  124. void Skladiste::DodajStvarStanduk(string ime, double tezinaPredmeta) {
  125.     if (trenutnoStanje == maxBrojPredmeta)
  126.         throw range_error ("Sanduk je popunjen!");
  127.     itemi[trenutnoStanje++] = new Sanduk(ime, tezinaPredmeta);
  128. }
  129.  
  130. void Skladiste::DodajStvarBure(string ime, double tezinaTecnosti) {
  131.     if (trenutnoStanje == maxBrojPredmeta)
  132.         throw range_error ("Bure je popunjeno!");
  133.     itemi[trenutnoStanje++] = new Bure(ime, tezinaTecnosti);
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement