offline
- mirkorad993
- Novi MyCity građanin
- 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));
}
|