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: 14828
  • 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 1687 korisnika na forumu :: 60 registrovanih, 1 sakriven i 1626 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 20624 - dana 04 Apr 2026 04:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Apis Dr, ArchaBasha, Arhiv, Banovo Brdo, blatruc82, Bo96, bokicacar, brandža84, BrcakRS, Carl Gustaf, Chainsaw, Dimitrise93, DonRumataEstorski, drpera, dunavzed, ekser222, Feller, FileFinder, gavranpero, Gitzherai, goxin, ivanR164, Jaxupa, Jovan1983, K2, krissstinaa, krkalon, Lep1na, Limeni91, Lotus, Marky, Medojed, milutin134, Miškić, nelezele, nevjerna beba, Nomica, Oscar2, ostoja, Pekman, Permaldar, Petarvu, procesor, Ray1973, SamoGledam, Sevatar, skok, Smiljkovich, sspp, stokssone, suton, tubular, vathra, veljkovicdani, vladaa012, Vojkan Petrovic, W123, Zoran1959, 79693