![]() Ласло Краус |
Објектно програмирање 1 - колоквијуми Други колоквијум 15. 6. 2012. |
---|
Написати на језику C++ следеће класе (класе опремити оним конструкторима, деструктором и оператором за доделу вредности који су потребни за безбедно коришћење класа; грешке пријављивати изузецима типа једноставних класа које су опремљене исписивањем поруке):
it<<pred
).
(
запремина,
тежина)
.
kut+=pred
; грешка је ако би се прекорачило дозвољен број предмета или запремина кутије). При уписивању у излазни ток у први ред се уписује 20 знакова '^'
, у други ред подаци о кутији у облику [
запремина,
сопственаТежина,
бројПредмета]
, затим се уписују поједини садржани предмети ред по ред и на крају ред од 20 знакова 'v'
.
kam+=kut
; грешка је ако би се прекорачио дозвољен број кутија, запремина товарног простора или носивост). У излазни ток у први ред се уписују подаци о камиону у облику регОзнака(
запремина,
носивост)
, а затим садржане кутије у засебне редове. Камион не сме да се копира ни на који начин.
Написати на језику C++ програм који направи кутију која садржи један артикал и једну кутију са два артикла, стави неколико примерака те кутије у један камион и испише камион на главном излазу. Користити константне параметре (не треба ништа учитавати с главног улаза).
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.Z
.// predmet.h #ifndef _predmet_h_ #define _predmet_h_ #include <iostream> using namespace std; class Predmet { public: virtual ~Predmet() {} virtual double V() const =0; virtual double Q() const =0; virtual Predmet* kopija() const =0; private: virtual void pisi(ostream& it) const =0; friend ostream& operator<<(ostream& it, const Predmet& p) { p.pisi(it); return it; } }; #endif(садржај)
// artikal.h #ifndef _artikal_h_ #define _artikal_h_ #include "predmet.h" #include <iostream> #include <cstring> using namespace std; class Artikal: public Predmet { char* naz; double zapr, tez; void kopiraj(const char* n, double z, double t) { naz = new char [strlen(n)+1]; strcpy(naz, n); zapr = z; tez = t; } void brisi() { delete [] naz; } void pisi(ostream& it) const { it << naz << '(' << zapr << ',' << tez << ')'; } public: explicit Artikal(const char* n, double z, double t) { kopiraj(n, z, t); } Artikal(const Artikal& a) { kopiraj(a.naz, a.zapr, a.tez); } ~Artikal() { brisi(); } Artikal& operator=(const Artikal& a) { if (this != &a) { brisi(); kopiraj(a.naz,a.zapr,a.tez); } return *this; } double V() const { return zapr; } double Q() const { return tez; } Artikal* kopija() const {return new Artikal(*this);} }; #endif
// gnemoze.h #ifndef _gnemoze_ #define _gnemoze_ #include <iostream> using namespace std; class GNeMoze {}; inline ostream& operator<<(ostream& it, const GNeMoze&) { return it << "*** Ne moze da se stavi!"; } #endif
// kutija.h #ifndef _kutija_h_ #define _kutija_h_ #include "predmet.h" #include <iostream> using namespace std; class Kutija: public Predmet { double a, b, c, tez; Predmet** niz; int kap, br; void kopiraj(const Kutija& k); void brisi(); void pisi(ostream& it) const; public: explicit Kutija(double aa=10, double bb=10, double cc=10, double tt=1, int k=3) { a = aa; b = bb; c = cc; tez = tt; br = 0; niz = new Predmet* [kap = k]; } Kutija(const Kutija& k) { kopiraj(k); } ~Kutija() { brisi(); } Kutija& operator=(const Kutija& k) { if (this != &k) { brisi(); kopiraj(k); } return *this; } double V() const { return a * b * c; } double Q() const; Kutija* kopija() const { return new Kutija(*this); } Kutija& operator+=(const Predmet& p); }; #endif
// kutija.cpp #include "kutija.h" #include "gnemoze.h" void Kutija::kopiraj(const Kutija& k) { a = k.a; b = k.b; c = k.c; tez = k.tez; br = k.br; niz = new Predmet* [kap = k.kap]; for (int i=0; i<br; i++) niz[i] = k.niz[i]->kopija(); } void Kutija::brisi() { for (int i=0; i<br; delete niz[i++]); delete [] niz; } void Kutija::pisi(ostream& it) const { it << "^^^^^^^^^^^^^^^^^^^^\n"; it << '[' << V() << ',' << tez << ',' << br << "]\n"; for (int i=0; i<br; it<<*niz[i++]<<endl); it << "vvvvvvvvvvvvvvvvvvvv"; } double Kutija::Q() const { double q = tez; for (int i=0; i<br; q+=niz[i++]->Q()); return q; } Kutija& Kutija::operator+=(const Predmet& p) { double v = p.V(); for (int i=0; i<br; v+=niz[i++]->V()); if (br==kap || v>V()) throw GNeMoze(); niz[br++] = p.kopija(); return *this; }
// kamion.h #ifndef _kamion_h_ #define _kamion_h_ #include "kutija.h" #include <iostream> #include <cstring> using namespace std; class Kamion { char* regOzn; double zapr, nos; Kutija* niz; int kap, br; Kamion(const Kamion&) {} void operator=(const Kamion&) {} public: Kamion(const char* ozn, int k, double z, double n) { regOzn = new char [strlen(ozn)+1]; strcpy(regOzn, ozn); niz = new Kutija [kap = k]; br = 0; zapr = z, nos = n; } ~Kamion() { delete [] regOzn; delete [] niz; } Kamion& operator+=(const Kutija& k); friend ostream& operator<<(ostream& it, const Kamion& k); }; #endif
// kamion.cpp #include "kamion.h" #include "gnemoze.h" Kamion& Kamion::operator+=(const Kutija& k) { double v = k.V(), q = k.Q(); for (int i=0; i<br; i++) { v += niz[i].V(); q += niz[i].Q(); } if (br==kap || v>zapr || q>nos) throw GNeMoze(); niz[br++] = k; return *this; } ostream& operator<<(ostream& it, const Kamion& k) { it << k.regOzn << '(' << k.zapr << ','<<k.nos<<")\n"; for (int i=0; i<k.br; it<<k.niz[i++]<<endl); return it; }
// program.cpp #include "artikal.h" #include "kutija.h" #include "kamion.h" #include "gnemoze.h" #include <iostream> using namespace std; int main() { Kamion kam("BG123AB", 3, 200, 300); try { Kutija kut(2, 3, 4, 5); kut += Artikal("reso", 2, 1); Kutija k(2, 3, 2, 3); k += Artikal("serpa", 3, 2); k += Artikal("lonac", 5, 3); kut += k; for (int i=0; i<5; i++) kam += kut; } catch (GNeMoze g) { cout << g << endl; } cout << kam << endl; return 0; }
*** Ne moze da se stavi! BG123AB(200,300) ^^^^^^^^^^^^^^^^^^^^ [24,5,2] reso(2,1) ^^^^^^^^^^^^^^^^^^^^ [12,3,2] serpa(3,2) lonac(5,3) vvvvvvvvvvvvvvvvvvvv vvvvvvvvvvvvvvvvvvvv ^^^^^^^^^^^^^^^^^^^^ [24,5,2] reso(2,1) ^^^^^^^^^^^^^^^^^^^^ [12,3,2] serpa(3,2) lonac(5,3) vvvvvvvvvvvvvvvvvvvv vvvvvvvvvvvvvvvvvvvv ^^^^^^^^^^^^^^^^^^^^ [24,5,2] reso(2,1) ^^^^^^^^^^^^^^^^^^^^ [12,3,2] serpa(3,2) lonac(5,3) vvvvvvvvvvvvvvvvvvvv vvvvvvvvvvvvvvvvvvvv
Copyright © 2013, Laslo Kraus
Последња ревизија: 17.4.2013.