Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <iostream>
- #include <stdexcept>
- #include <string>
- #include "TestCurenja.h"
- using namespace std;
- class Obrok
- {
- std::string naziv;
- double cijena;
- std::string narucioc;
- public:
- Obrok(std::string naziv, double cijena, std::string narucioc) :
- naziv(naziv), cijena(cijena), narucioc(narucioc) {}
- std::string DajNazivObroka() const
- {
- return naziv;
- }
- double DajCijenuObroka() const
- {
- return cijena;
- }
- virtual double DajUkupnuCijenu () const { return cijena; }
- std::string DajNarucioca() const
- {
- return narucioc;
- }
- virtual void Ispisi() const
- {
- std::cout << narucioc << " je narucio " << naziv << " i treba platiti "
- << cijena << " KM.\n";
- }
- virtual Obrok *DajKopiju () const {
- return new Obrok (*this);
- }
- };
- class Narudzbe
- {
- int broj_narudzbi, kapacitet;
- Obrok **obroci;
- public:
- Narudzbe() : broj_narudzbi(0), kapacitet(20),
- obroci(new Obrok*[kapacitet]) {}
- ~Narudzbe()
- { for (int i=0; i<broj_narudzbi; i++)
- delete obroci[i];
- delete[] obroci;
- }
- Narudzbe(const Narudzbe &n) : broj_narudzbi(n.broj_narudzbi),
- kapacitet(n.kapacitet)
- {
- obroci=new Obrok *[kapacitet];
- for (int i=0; i<broj_narudzbi; i++)
- obroci[i]=n.obroci[i]->DajKopiju();
- }
- Narudzbe (const Narudzbe &&n) {
- broj_narudzbi=n.broj_narudzbi;
- kapacitet=n.kapacitet;
- obroci=n.obroci;
- n.broj_narudzbi=0;
- n.kapacitet=0;
- n.obroci=nullptr;
- }
- Narudzbe &operator =(const Narudzbe &n) {
- if (this==&n) return *this;
- for (int i=0; i<broj_narudzbi; i++)
- delete obroci [i];
- delete [] obroci;
- broj_narudzbi=n.broj_narudzbi;
- kapacitet=n.kapacitet;
- obroci=new Obrok *[kapacitet];
- for (int i=0; i<broj_narudzbi; i++)
- obroci[i]= n.obroci[i]->DajKopiju();
- return *this;
- }
- Narudzbe &operator =(const Narudzbe &&n) {
- if (this==&n) return *this;
- for (int i=0; i<broj_narudzbi; i++)
- delete obroci [i];
- delete [] obroci;
- kapacitet=n.kapacitet;
- broj_narudzbi=n.broj_narudzbi;
- obroci=n.obroci;
- n.kapacitet=0;
- n.broj_narudzbi=0;
- n.obroci=nullptr;
- return *this;
- }
- void NaruciObrok(std::string naziv, double cijena, std::string narucioc)
- {
- if(broj_narudzbi == kapacitet)
- {
- try {
- kapacitet+=20;
- Obrok **pom= new Obrok *[kapacitet];
- for (int i=0; i<broj_narudzbi; i++)
- pom[i]=obroci[i];
- delete [] obroci;
- obroci=pom;
- }
- catch (bad_alloc) {
- throw std::range_error("Dostignut maksimalan broj narudzbi!");
- }
- }
- obroci[broj_narudzbi++] = new Obrok(naziv, cijena, narucioc);
- }
- void NaruciObrokSPicem (string naziv, string pice, double cijena_o, double cijena_p, string narucioc) {
- if (broj_narudzbi>kapacitet)
- throw std::range_error("Dostignut maksimalan broj narudzbi!");
- obroci[broj_narudzbi++]= new ObrokSaPicem (naziv,pice,cijena_o,cijena_p,narucioc);
- }
- void ObradiNarudzbu () const {
- if (broj_narudzbi==0) throw "Nema narudzbi!";
- obroci[broj_narudzbi-1]->Ispisi();
- delete obroci[broj_narudzbi-1];
- broj_narudzbi--;
- }
- bool operator ! () {
- if (broj_narudzbi==0) return true;
- return false;
- }
- friend Narudzbe operator+ (const Narudzbe &n1, const Narudzbe &n2)
- {
- Narudzbe n3;
- n3.kapacitet = n1.kapacitet + n2.kapacitet;
- n3.broj_narudzbi = n1.broj_narudzbi + n2.broj_narudzbi;
- n3.obroci = new Obrok * [n1.kapacitet + n2.kapacitet];
- for(int i = 0; i < n1.broj_narudzbi; i++)
- {
- n3.obroci[i] = n1.obroci[i]->DajKopiju();
- }
- for (int i=n1.broj_narudzbi; i<n3.broj_narudzbi; i++)
- {
- n3.obroci[i]=n2.obroci[i]->DajKopiju();
- }
- }
- int operator () (string student ) {
- int cijena{0};
- for (int i=0; i<broj_narudzbi; i++) {
- if (student==obroci[i]->DajNarucioca())
- cijena+=obroci[i]->DajUkupnuCijenu();
- }
- return cijena;
- }
- const Obrok &operator[] (int redni_broj) const
- {
- return *obroci[redni_broj];
- }
- };
- class ObrokSaPicem : public Obrok {
- string naziv_pica;
- double cijena_pica;
- public :
- ObrokSaPicem (string naziv, string pice, double cijena_o, double cijena_p, string narucioc) : Obrok(naziv,cijena_o,narucioc),
- naziv_pica(pice), cijena_pica(cijena_p) {}
- string DajNazivPica () const {return naziv_pica; }
- double DajCijenuPica () const { return cijena_pica; }
- double DajUkupnuCijenu () const override { return cijena+cijena_pica; }
- void Ispisi() const override
- {
- std::cout << narucioc << " je narucio " << naziv <<" i" << naziv_pica<<" i ukupno treba platiti "
- << cijena+ cijena_pica<< " KM.\n";
- }
- virtual ObrokSaPicem *DajKopiju () const {
- return new ObrokSaPicem (*this);
- }
- int main()
- {
- Narudzbe etf_fast_food;
- etf_fast_food.NaruciObrok("burek", 2.5, "Brus Li");
- etf_fast_food[0].Ispisi();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement