C++, zadatak

C++, zadatak

offline
  • Pridružio: 08 Feb 2014
  • Poruke: 2

Pozdrav, krenuo sam da radim ovaj zadatak i zapeo sam kod trece klase(Kutija). Nije mi jasno sta je htjeo kad je napisao da se predmeti drze u dinamickom nizu pokazivaca, i kako da instanciram predmet kod operatora dodjele u trecoj klasi kad je klasa Predmet apstraktna. Ako neko ima resenje neka ponudi...



ja sam do sada uradio

  1. #include<iostream>
  2. #include<cstring>
  3. #include<iomanip>
  4. using namespace std;
  5. class Predmet
  6. {
  7.     friend ostream &operator<<(ostream &,Predmet &);
  8. public:
  9.     virtual void print(ostream &)=0;
  10.     virtual Predmet* kopija()=0;
  11.     virtual double zapremina()const=0;
  12.     virtual double tezina()const=0;
  13. };
  14. /*------------------------------------------Artikal------------------------------------*/
  15. ostream &operator<<(ostream &out,Predmet &p)
  16. {
  17.     p.print(out); return out;
  18. }
  19.  
  20. class Artikal:public Predmet
  21. {
  22. protected:
  23.     int sifra;
  24.     char *naziv;
  25.     double zap,tez,cijena;
  26. public:
  27.     Artikal(const int=0,const char* ="",const double=0,const double=0,const double=0);
  28.     Artikal(Artikal &);
  29.     Artikal* kopija();
  30.     Artikal &operator=(Artikal &);
  31.     void read();
  32.     void print(ostream &);
  33.     double zapremina()const;
  34.     double tezina()const;
  35.     ~Artikal();
  36. };
  37. Artikal* Artikal::kopija()
  38. {
  39.     return new Artikal(*this);
  40. }
  41. Artikal::Artikal(const int s,const char* n,const double z,const double t,const double c)
  42. {
  43.     sifra=s;
  44.     naziv=new char[strlen(n)+1];
  45.     strcpy(naziv,n);
  46.     zap=z;
  47.     tez=t;
  48.     cijena=c;
  49. }
  50. Artikal::~Artikal()
  51. {
  52.     delete [] naziv;
  53. }
  54. double Artikal::tezina()const
  55. {
  56.     return tez;
  57. }
  58. double Artikal::zapremina()const
  59. {
  60.     return zap;
  61. }
  62. void Artikal::print(ostream &out)
  63. {
  64.     if(sifra<10000) out<<"0";
  65.     if(sifra<1000) out<<"0";
  66.     if(sifra<100) out<<"0";
  67.     if(sifra<10) out<<"0";
  68.     out<<sifra;
  69.     out<<" ";
  70.     if(strlen(naziv)<15) out<<naziv;
  71.     if(strlen(naziv)>=15)
  72.     {
  73.         for(int i=0;i<12;i++)
  74.             out<<naziv[i];
  75.         out<<"...";
  76.     }
  77.     out<<" "<<cijena<<endl;
  78. }
  79. void Artikal::read()
  80. {
  81.     cout<<"Unesi sifru: "; cin>>sifra;
  82.     cout<<"Unesi naziv artikla: "; cin>>naziv;
  83.     cout<<"Unesi zapreminu artikla: "; cin>>zap;
  84.     cout<<"Unesi tezinu artikla: "; cin>>tez;
  85.     cout<<"Unesi cijenu artikla: "; cin>>cijena;
  86. }
  87. Artikal &Artikal::operator=(Artikal &a)
  88. {
  89.     if(this!=&a)
  90.     {
  91.         sifra=a.sifra;
  92.         naziv=new char[strlen(a.naziv)+1];
  93.         strcpy(naziv,a.naziv);
  94.         zap=a.zap;
  95.         tez=a.tez;
  96.         cijena=a.cijena;
  97.     }
  98.     return *this;
  99. }
  100. Artikal::Artikal(Artikal &a)
  101. {
  102.     sifra=a.sifra;
  103.     naziv=new char[strlen(a.naziv)+1];
  104.     strcpy(naziv,a.naziv);
  105.     zap=a.zap;
  106.     tez=a.tez;
  107.     cijena=a.cijena;
  108. }
  109. /*------------------------------------------Kutija------------------------------------*/
  110. class Kutija:public Predmet
  111. {
  112. protected:
  113.     double tez;
  114.     double a,b,c;
  115.     Predmet *niz;
  116.     int max;
  117. public:
  118.     Kutija(Kutija &);
  119.     Kutija &operator=(Kutija &);
  120.     ~Kutija();
  121.     Kutija(double=0,double=0,double=0,double=0,int=0);
  122.     Kutija &operator+=(Predmet &);
  123.     Kutija* kopija();
  124.     void print(ostream &);
  125.     double zapremina()const;
  126.     double tezina()const;
  127. };
  128.  
  129. Kutija* Kutija::kopija()
  130. {
  131.     return new Kutija(*this);
  132. }
  133. void Kutija::print(ostream &out)
  134. {
  135.     out<<"KUTIJA ["<<zapremina();
  136. }
  137. double Kutija::zapremina()const
  138. {
  139.     return a*b*c;
  140. }
  141. double Kutija::tezina()const
  142. {
  143.     return tez;
  144. }
  145. main(int arvc,char **argv)
  146. {
  147.    
  148. }



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14825
  • Gde živiš: Niš

mirkorad993 ::Nije mi jasno sta je htjeo kad je napisao da se predmeti drze u dinamickom nizu pokazivacaTo bi značilo da niz pokazivača treba da bude u dinamičkoj zoni. Kako je reč o nizu pokazivača, tip mora da bude Predmet**, a ne samo Predmet* kao što si napisao. To bi bilo nešto ovako:

  1. class Kutija : public Predmet {
  2.    Predmet** Niz_pokazivaca;
  3.    /* ... */
  4.    Kutija(int);
  5. };
  6.  
  7. Kutija::Kutija(int n) {
  8.    Niz_pokazivaca = new Predmet*[n];
  9.    /* ... */
  10. }



offline
  • Pridružio: 08 Feb 2014
  • Poruke: 2

Hvala na odgovoru, prepravio sam taj dio i dobro funkcionise.. sad me muci ova cetvrta klasa Racun, nikako da skontam sta je "pisac" htjeo da kaze...

prepravljeno

  1. #include<iostream>
  2. #include<vector>
  3. #include<cstring>
  4. #include<iomanip>
  5. using namespace std;
  6. class Predmet
  7. {
  8.     friend ostream &operator<<(ostream &,Predmet &);
  9. public:
  10.     virtual void print(ostream &)=0;
  11.     virtual Predmet* kopija()=0;
  12.     virtual double zapremina()const=0;
  13.     virtual double tezina()const=0;
  14. };
  15. /*------------------------------------------Artikal------------------------------------*/
  16. ostream &operator<<(ostream &out,Predmet &p)
  17. {
  18.     p.print(out); return out;
  19. }
  20.  
  21. class Artikal:public Predmet
  22. {
  23. protected:
  24.     int sifra;
  25.     char *naziv;
  26.     double zap,tez,cijena;
  27. public:
  28.     Artikal(const int=0,const char* ="",const double=0,const double=0,const double=0);
  29.     Artikal(Artikal &);
  30.     Artikal* kopija();
  31.     Artikal &operator=(Artikal &);
  32.     void read();
  33.     void print(ostream &);
  34.     double zapremina()const;
  35.     double tezina()const;
  36.     ~Artikal();
  37. };
  38. Artikal* Artikal::kopija()
  39. {
  40.     return new Artikal(*this);
  41. }
  42. Artikal::Artikal(const int s,const char* n,const double z,const double t,const double c)
  43. {
  44.     sifra=s;
  45.     naziv=new char[strlen(n)+1];
  46.     strcpy(naziv,n);
  47.     zap=z;
  48.     tez=t;
  49.     cijena=c;
  50. }
  51. Artikal::~Artikal()
  52. {
  53.     delete [] naziv;
  54. }
  55. double Artikal::tezina()const
  56. {
  57.     return tez;
  58. }
  59. double Artikal::zapremina()const
  60. {
  61.     return zap;
  62. }
  63. void Artikal::print(ostream &out)
  64. {
  65.     if(sifra<10000) out<<"0";
  66.     if(sifra<1000) out<<"0";
  67.     if(sifra<100) out<<"0";
  68.     if(sifra<10) out<<"0";
  69.     out<<sifra;
  70.     out<<" ";
  71.     if(strlen(naziv)<15) out<<naziv;
  72.     if(strlen(naziv)>=15)
  73.     {
  74.         for(int i=0;i<12;i++)
  75.             out<<naziv[i];
  76.         out<<"...";
  77.     }
  78.     out<<" "<<cijena<<endl;
  79. }
  80. void Artikal::read()
  81. {
  82.     cout<<"Unesi sifru: "; cin>>sifra;
  83.     cout<<"Unesi naziv artikla: "; cin>>naziv;
  84.     cout<<"Unesi zapreminu artikla: "; cin>>zap;
  85.     cout<<"Unesi tezinu artikla: "; cin>>tez;
  86.     cout<<"Unesi cijenu artikla: "; cin>>cijena;
  87. }
  88. Artikal &Artikal::operator=(Artikal &a)
  89. {
  90.     if(this!=&a)
  91.     {
  92.         sifra=a.sifra;
  93.         naziv=new char[strlen(a.naziv)+1];
  94.         strcpy(naziv,a.naziv);
  95.         zap=a.zap;
  96.         tez=a.tez;
  97.         cijena=a.cijena;
  98.     }
  99.     return *this;
  100. }
  101. Artikal::Artikal(Artikal &a)
  102. {
  103.     sifra=a.sifra;
  104.     naziv=new char[strlen(a.naziv)+1];
  105.     strcpy(naziv,a.naziv);
  106.     zap=a.zap;
  107.     tez=a.tez;
  108.     cijena=a.cijena;
  109. }
  110. /*------------------------------------------Kutija------------------------------------*/
  111. class Kutija:public Predmet
  112. {
  113.  
  114. protected:
  115.     double tez,u_tez;
  116.     double a,b,c;
  117.     Predmet **niz_p;
  118.     int max;
  119.     int vrh;
  120. public:
  121.     Kutija(Kutija &);
  122.     Kutija &operator=(Kutija &);
  123.     ~Kutija();
  124.     Kutija(double=0,double=0,double=0,double=0,int=0);
  125.     Kutija &operator+=(Predmet*);
  126.     Kutija* kopija();
  127.     void print(ostream &);
  128.     double zapremina()const;
  129.     double tezina()const;
  130. };
  131.  
  132. Kutija &Kutija::operator+=(Predmet *p)
  133. {
  134.     if(vrh<max)
  135.     {
  136.         (*(niz_p+vrh))=p->kopija();
  137.         vrh++;
  138.         u_tez+=p->tezina();
  139.     }
  140.     return *this;
  141. }
  142. Kutija::Kutija(Kutija &k)
  143. {
  144.     vrh=k.vrh;
  145.     tez=k.tez;
  146.     a=k.a; b=k.b; c=k.c;
  147.     max=k.max;
  148.     niz_p=new Predmet *[max];
  149.         for(int i=0;i<max;i++)
  150.             (*(niz_p+i))=(*(k.niz_p+i));
  151. }
  152. Kutija &Kutija::operator=(Kutija &k)
  153. {
  154.     if(this!=&k)
  155.     {
  156.         vrh=k.vrh;
  157.         tez=k.tez;
  158.         a=k.a; b=k.b; c=k.c;
  159.         max=k.max;
  160.         niz_p=new Predmet *[max];
  161.         for(int i=0;i<max;i++)
  162.             (*(niz_p+i))=(*(k.niz_p+i));
  163.     }
  164.     return *this;
  165. }
  166. Kutija::~Kutija()
  167. {
  168.     delete [] niz_p;
  169. }
  170. Kutija::Kutija(double t,double aa,double bb,double cc,int n)
  171. {
  172.     tez=t; a=aa; b=bb; c=cc; max=n; vrh=0; u_tez=t;
  173.     niz_p=new Predmet*[max];
  174. }
  175. Kutija* Kutija::kopija()
  176. {
  177.     return new Kutija(*this);
  178. }
  179. void Kutija::print(ostream &out)
  180. {
  181.    out<<"KUTIJA [ "<<zapremina()<<","<<u_tez<<"/"<<tezina()<<" ]"<<endl;
  182.     for(int i=0;i<vrh;i++)
  183.         (*(niz_p+i))->print(out);
  184.    /*(*(niz_p))->print(out);*/
  185. }
  186. double Kutija::zapremina()const
  187. {
  188.     return a*b*c;
  189. }
  190. double Kutija::tezina()const
  191. {
  192.     return tez;
  193. }
  194.  
  195. /*----------------------------------------------RACUN--------------------------------*/
  196. class Racun
  197. {
  198. protected:
  199.     vector<Artikal> artikli;
  200. public:
  201.     Racun(Artikal &);
  202. };
  203. Racun::Racun(Artikal &a)
  204. {
  205.     artikli.push_back(a);
  206. }
  207.  
  208. main(int arvc,char **argv)
  209. {
  210.     Predmet *p;
  211.     Artikal a(20,"Pepsi",2,3,4);
  212.     p=&a;
  213.     Kutija k(20,2,2,2,50);
  214.     k+=p;
  215.  
  216.     Kutija k2(20,2,2,2,50);
  217.     Artikal a2(20,"Smoki",2,3,4);
  218.     p=&a2;
  219.     k2+=p;
  220.  
  221.     Artikal a3(20,"Keks",2,3,4);
  222.     p=&a3;
  223.     k2+=p;
  224.  
  225.     p=&k2;
  226.     k+=p;
  227.     cout<<k;
  228.  
  229. }


Klasu Racun sam pokusao na ovaj nacin al' mi izbacuje gresku..

  1. class Racun
  2. {
  3. protected:
  4.     vector<Artikal> artikli;
  5. public:
  6.     Racun(Artikal &);
  7. };
  8. Racun::Racun(Artikal &a)
  9. {
  10.     artikli.push_back(Artikal(a));
  11. }

Ko je trenutno na forumu
 

Ukupno su 1049 korisnika na forumu :: 11 registrovanih, 1 sakriven i 1037 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: acatomic, cole77, dragisa dragisa, Fabius, icemilos, Pele23, PrincipL, renvoi, Slingshot, Srle993, Zukov