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

#include<iostream> #include<cstring> #include<iomanip> using namespace std; class Predmet {     friend ostream &operator<<(ostream &,Predmet &); public:     virtual void print(ostream &)=0;     virtual Predmet* kopija()=0;     virtual double zapremina()const=0;     virtual double tezina()const=0; }; /*------------------------------------------Artikal------------------------------------*/ ostream &operator<<(ostream &out,Predmet &p) {     p.print(out); return out; } class Artikal:public Predmet { protected:     int sifra;     char *naziv;     double zap,tez,cijena; public:     Artikal(const int=0,const char* ="",const double=0,const double=0,const double=0);     Artikal(Artikal &);     Artikal* kopija();     Artikal &operator=(Artikal &);     void read();     void print(ostream &);     double zapremina()const;     double tezina()const;     ~Artikal(); }; Artikal* Artikal::kopija() {     return new Artikal(*this); } Artikal::Artikal(const int s,const char* n,const double z,const double t,const double c) {     sifra=s;     naziv=new char[strlen(n)+1];     strcpy(naziv,n);     zap=z;     tez=t;     cijena=c; } Artikal::~Artikal() {     delete [] naziv; } double Artikal::tezina()const {     return tez; } double Artikal::zapremina()const {     return zap; } void Artikal::print(ostream &out) {     if(sifra<10000) out<<"0";     if(sifra<1000) out<<"0";     if(sifra<100) out<<"0";     if(sifra<10) out<<"0";     out<<sifra;     out<<" ";     if(strlen(naziv)<15) out<<naziv;     if(strlen(naziv)>=15)     {         for(int i=0;i<12;i++)             out<<naziv[i];         out<<"...";     }     out<<" "<<cijena<<endl; } void Artikal::read() {     cout<<"Unesi sifru: "; cin>>sifra;     cout<<"Unesi naziv artikla: "; cin>>naziv;     cout<<"Unesi zapreminu artikla: "; cin>>zap;     cout<<"Unesi tezinu artikla: "; cin>>tez;     cout<<"Unesi cijenu artikla: "; cin>>cijena; } Artikal &Artikal::operator=(Artikal &a) {     if(this!=&a)     {         sifra=a.sifra;         naziv=new char[strlen(a.naziv)+1];         strcpy(naziv,a.naziv);         zap=a.zap;         tez=a.tez;         cijena=a.cijena;     }     return *this; } Artikal::Artikal(Artikal &a) {     sifra=a.sifra;     naziv=new char[strlen(a.naziv)+1];     strcpy(naziv,a.naziv);     zap=a.zap;     tez=a.tez;     cijena=a.cijena; } /*------------------------------------------Kutija------------------------------------*/ class Kutija:public Predmet { protected:     double tez;     double a,b,c;     Predmet *niz;     int max; public:     Kutija(Kutija &);     Kutija &operator=(Kutija &);     ~Kutija();     Kutija(double=0,double=0,double=0,double=0,int=0);     Kutija &operator+=(Predmet &);     Kutija* kopija();     void print(ostream &);     double zapremina()const;     double tezina()const; }; Kutija* Kutija::kopija() {     return new Kutija(*this); } void Kutija::print(ostream &out) {     out<<"KUTIJA ["<<zapremina(); } double Kutija::zapremina()const {     return a*b*c; } double Kutija::tezina()const {     return tez; } main(int arvc,char **argv) {     }



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14811
  • 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:
class Kutija : public Predmet {    Predmet** Niz_pokazivaca;    /* ... */    Kutija(int); }; Kutija::Kutija(int n) {    Niz_pokazivaca = new Predmet*[n];    /* ... */ }



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
#include<iostream> #include<vector> #include<cstring> #include<iomanip> using namespace std; class Predmet {     friend ostream &operator<<(ostream &,Predmet &); public:     virtual void print(ostream &)=0;     virtual Predmet* kopija()=0;     virtual double zapremina()const=0;     virtual double tezina()const=0; }; /*------------------------------------------Artikal------------------------------------*/ ostream &operator<<(ostream &out,Predmet &p) {     p.print(out); return out; } class Artikal:public Predmet { protected:     int sifra;     char *naziv;     double zap,tez,cijena; public:     Artikal(const int=0,const char* ="",const double=0,const double=0,const double=0);     Artikal(Artikal &);     Artikal* kopija();     Artikal &operator=(Artikal &);     void read();     void print(ostream &);     double zapremina()const;     double tezina()const;     ~Artikal(); }; Artikal* Artikal::kopija() {     return new Artikal(*this); } Artikal::Artikal(const int s,const char* n,const double z,const double t,const double c) {     sifra=s;     naziv=new char[strlen(n)+1];     strcpy(naziv,n);     zap=z;     tez=t;     cijena=c; } Artikal::~Artikal() {     delete [] naziv; } double Artikal::tezina()const {     return tez; } double Artikal::zapremina()const {     return zap; } void Artikal::print(ostream &out) {     if(sifra<10000) out<<"0";     if(sifra<1000) out<<"0";     if(sifra<100) out<<"0";     if(sifra<10) out<<"0";     out<<sifra;     out<<" ";     if(strlen(naziv)<15) out<<naziv;     if(strlen(naziv)>=15)     {         for(int i=0;i<12;i++)             out<<naziv[i];         out<<"...";     }     out<<" "<<cijena<<endl; } void Artikal::read() {     cout<<"Unesi sifru: "; cin>>sifra;     cout<<"Unesi naziv artikla: "; cin>>naziv;     cout<<"Unesi zapreminu artikla: "; cin>>zap;     cout<<"Unesi tezinu artikla: "; cin>>tez;     cout<<"Unesi cijenu artikla: "; cin>>cijena; } Artikal &Artikal::operator=(Artikal &a) {     if(this!=&a)     {         sifra=a.sifra;         naziv=new char[strlen(a.naziv)+1];         strcpy(naziv,a.naziv);         zap=a.zap;         tez=a.tez;         cijena=a.cijena;     }     return *this; } Artikal::Artikal(Artikal &a) {     sifra=a.sifra;     naziv=new char[strlen(a.naziv)+1];     strcpy(naziv,a.naziv);     zap=a.zap;     tez=a.tez;     cijena=a.cijena; } /*------------------------------------------Kutija------------------------------------*/ class Kutija:public Predmet { protected:     double tez,u_tez;     double a,b,c;     Predmet **niz_p;     int max;     int vrh; public:     Kutija(Kutija &);     Kutija &operator=(Kutija &);     ~Kutija();     Kutija(double=0,double=0,double=0,double=0,int=0);     Kutija &operator+=(Predmet*);     Kutija* kopija();     void print(ostream &);     double zapremina()const;     double tezina()const; }; Kutija &Kutija::operator+=(Predmet *p) {     if(vrh<max)     {         (*(niz_p+vrh))=p->kopija();         vrh++;         u_tez+=p->tezina();     }     return *this; } Kutija::Kutija(Kutija &k) {     vrh=k.vrh;     tez=k.tez;     a=k.a; b=k.b; c=k.c;     max=k.max;     niz_p=new Predmet *[max];         for(int i=0;i<max;i++)             (*(niz_p+i))=(*(k.niz_p+i)); } Kutija &Kutija::operator=(Kutija &k) {     if(this!=&k)     {         vrh=k.vrh;         tez=k.tez;         a=k.a; b=k.b; c=k.c;         max=k.max;         niz_p=new Predmet *[max];         for(int i=0;i<max;i++)             (*(niz_p+i))=(*(k.niz_p+i));     }     return *this; } Kutija::~Kutija() {     delete [] niz_p; } Kutija::Kutija(double t,double aa,double bb,double cc,int n) {     tez=t; a=aa; b=bb; c=cc; max=n; vrh=0; u_tez=t;     niz_p=new Predmet*[max]; } Kutija* Kutija::kopija() {     return new Kutija(*this); } void Kutija::print(ostream &out) {    out<<"KUTIJA [ "<<zapremina()<<","<<u_tez<<"/"<<tezina()<<" ]"<<endl;     for(int i=0;i<vrh;i++)         (*(niz_p+i))->print(out);    /*(*(niz_p))->print(out);*/ } double Kutija::zapremina()const {     return a*b*c; } double Kutija::tezina()const {     return tez; } /*----------------------------------------------RACUN--------------------------------*/ class Racun { protected:     vector<Artikal> artikli; public:     Racun(Artikal &); }; Racun::Racun(Artikal &a) {     artikli.push_back(a); } main(int arvc,char **argv) {     Predmet *p;     Artikal a(20,"Pepsi",2,3,4);     p=&a;     Kutija k(20,2,2,2,50);     k+=p;     Kutija k2(20,2,2,2,50);     Artikal a2(20,"Smoki",2,3,4);     p=&a2;     k2+=p;     Artikal a3(20,"Keks",2,3,4);     p=&a3;     k2+=p;     p=&k2;     k+=p;     cout<<k; }

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

class Racun { protected:     vector<Artikal> artikli; public:     Racun(Artikal &); }; Racun::Racun(Artikal &a) {     artikli.push_back(Artikal(a)); }

Ko je trenutno na forumu
 

Ukupno su 837 korisnika na forumu :: 43 registrovanih, 5 sakrivenih i 789 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: anta, antonije64, bojank, ccoogg123, CikaKURE, cincarin, comi_pfc, darios, Djokislav, dozorni, dushan, Ilija Cvorovic, jackreacher011011, Još malo pa deda, Kaplar2, Karla, Kubovac, ladro, lord sir giga, Lošmi, menges, mercedesamg, Mercury, Milometer, milutin134, nebojsag, nextyamb, Oscar, Petarvu, proka89, raptorsi, raso7, saputnik plavetnila, SR-3m, Srle993, stegonosa, StepskiVuk, tubular, vathra, Vlad000, vladaa012, šumar bk2, žeks62