Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdexcept>
- #include <algorithm>
- using namespace std;
- class Apstraktna{
- protected:
- string ime_robe;
- double t_robe;
- double t_spremnika;
- public:
- virtual ~Apstraktna(){}
- Apstraktna(string ime,double tr,double ts):ime_robe(ime),t_robe(tr),t_spremnika(ts){}
- string DajIme()const{return ime_robe;}
- double DajTezinuRobe()const{return t_robe;}
- double DajTezinuSpremnika()const{return t_spremnika;}
- virtual void Ispisi()const=0;
- virtual Apstraktna* DajKopiju()const=0;
- };
- class Sanduk:public Apstraktna{
- public:
- Sanduk(string ime,double tr,double ts):Apstraktna(ime,tr,ts){}
- void Ispisi()const{
- cout<<"U sanduku je "<<ime_robe<<", a tezina mu je "<<t_spremnika<<"kg, dok je tezina robe "<<t_robe<<"kg."<<endl;
- }
- Apstraktna *DajKopiju()const{
- return new Sanduk(*this);
- }
- };
- class Bure:public Apstraktna{
- public:
- Bure(string ime,double tr,double ts):Apstraktna(ime,tr,ts){}
- void Ispisi()const{
- cout<<"U buretu je "<<ime_robe<<", a tezina mu je "<<t_spremnika<<"kg, dok je tezina robe "<<t_robe<<"kg."<<endl;
- }
- Apstraktna *DajKopiju()const override{
- return new Bure(*this);
- }
- };
- class Skladiste{
- Apstraktna **skladiste;
- int c_max;
- public:
- Skladiste(){}
- explicit Skladiste(int c_max):c_max(c_max), skladiste(new Apstraktna*[c_max]{}){}
- ~Skladiste(){
- for(int i(0);i<c_max;i++){
- delete skladiste[i];
- }
- delete [] skladiste;
- }
- Skladiste(const Skladiste &s):c_max(s.c_max){
- skladiste=new Apstraktna*[c_max];
- for(int i(0);i<c_max;i++){
- skladiste[i]=s.skladiste[i]->DajKopiju();
- }
- }
- Skladiste(Skladiste &&s):c_max(s.c_max){
- skladiste=s.skladiste;
- s.skladiste=nullptr;
- }
- Skladiste &operator=(const Skladiste &s){
- if(c_max!=s.c_max) throw domain_error("Nesaglsni kapaciteti.");
- if(this!=&s){
- for(int i(0);i<c_max;i++){
- delete skladiste[i];
- }
- for(int i(0);i<c_max;i++){
- skladiste[i]=s.skladiste[i]->DajKopiju();
- }
- }
- return *this;
- }
- Skladiste &operator=(Skladiste &&s){
- if(c_max!=s.c_max) throw domain_error("Nesaglsni kapaciteti.");
- if(this!=&s){
- for(int i(0);i<c_max;i++){
- delete skladiste[i];
- }
- skladiste=s.skladiste;
- s.skladiste=nullptr;
- }
- return *this;
- }
- int DajBrojObjekata()const{
- int br(0);
- for(int i(0);i<c_max;i++){
- if(skladiste[i]!=nullptr)
- br++;
- }
- return br;
- }
- void DodajSanduk(string ime,double tr,double ts){
- Sanduk s(ime,tr,ts);
- if(DajBrojObjekata()==c_max) throw domain_error("Skladiste popunjeno");
- skladiste[DajBrojObjekata()]=s.DajKopiju();
- }
- void DodajBure(string ime,double tr,double ts){
- Bure b(ime,tr,ts);
- if(DajBrojObjekata()==c_max) throw domain_error("Skladiste popunjeno");
- skladiste[DajBrojObjekata()]=b.DajKopiju();
- }
- Apstraktna &NajlaksiObjekat()const{
- Apstraktna *najlaksi=skladiste[0];
- for(int i(0);i<DajBrojObjekata();i++){
- if(skladiste[i]->DajTezinuSpremnika()<najlaksi->DajTezinuSpremnika())
- najlaksi=skladiste[i];
- }
- return *najlaksi;
- }
- Apstraktna &NajteziObjekat()const{
- Apstraktna *najtezi=skladiste[0];
- for(int i(0);i<DajBrojObjekata();i++){
- if(skladiste[i]->DajTezinuSpremnika()>najtezi->DajTezinuSpremnika())
- najtezi=skladiste[i];
- }
- return *najtezi;
- }
- int DajTezeObjekte(int n){
- int br(0);
- for(int i(0);i<DajBrojObjekata();i++){
- if((skladiste[i]->DajTezinuRobe()+skladiste[i]->DajTezinuRobe())>n)
- br++;
- }
- return br;
- }
- void Ispisi()const{
- Skladiste ps(*this);
- sort(ps.skladiste,ps.skladiste+DajBrojObjekata(),[](Apstraktna *p1,Apstraktna *p2){
- return (p1->DajTezinuRobe()+p1->DajTezinuSpremnika())>(p2->DajTezinuRobe()+p2->DajTezinuSpremnika());
- });
- for(int i(0);i<DajBrojObjekata();i++){
- ps.skladiste[i]->Ispisi();
- }
- }
- };
- int main ()
- {
- Skladiste Magacin(3);
- Magacin.DodajBure("voda",23,32);
- Magacin.DodajBure("ulje",20,50);
- Magacin.DodajSanduk("daska",20,10);
- Magacin.Ispisi();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement