![]() Ласло Краус |
Објектно програмирање - колоквијуми Други колоквијум Друга група 9. 6. 2004. |
---|
I - Пројектовати на језику C++ апстракну класу Predmet
за предмете. Предвидети:
II - Пројектовати на језику C++ класу Niz
за низове предмета. Предвидети:
niz1=niz2
),
+niz
),
niz+=br
) - ако се низ препуни, повећати капацитет за 10%, али најмање за 5 места,
niz[ind
]) - приступ непостојећем елементу је грешка,
d<<niz
).
Грешке пријављивати изузецима помоћу објектака типа једноставних класа.
III - Пројектовати на језику C++ класу Kvadrat
као изведену класу из класе Predmet
. Поред могућности основне класе предвидети:
IV - Саставити на језику C++ главни програм који:
studentx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.N:
(Nastava
on
\\Xs200-2
) у каталогу ObjektnoProg\RSx
(x
је број радне станице за којим се ради).// predmet.h - Klasa apstraktnih predmeta #ifndef _predmet_h_ #define _predmet_h_ #include <iostream> using namespace std; class Predmet { virtual void pisi (ostream& d) const=0; public: virtual Predmet* kopija () const =0; virtual ~Predmet () {} friend ostream& operator<< (ostream& d, const Predmet& p) { p.pisi (d); return d; } }; #endif(садржај)
// niz.h - Klasa nizova apstraktnih predmeta. #ifndef _niz_h_ #define _niz_h_ #include "predmet.h" #include <iostream> using namespace std; class GIndeks {}; class Niz { Predmet **a; int n, k; void kopiraj (const Niz &niz); void brisi (); public: explicit Niz (int kk=3) { a = new Predmet* [k = kk]; n = 0; } Niz (const Niz& niz) { kopiraj (niz); } virtual ~Niz () { brisi (); } Niz& operator= (const Niz& niz) { if (this != &niz) { brisi (); kopiraj (niz); } return *this; } int operator+ () const { return n; } virtual Niz& operator+= (const Predmet& p); Predmet*& operator[] (int i) { if (i<0 || i>=n) throw GIndeks (); return a[i]; } const Predmet* operator[] (int i)const{ if (i<0 || i>=n) throw GIndeks (); return a[i]; } friend ostream& operator<< (ostream& d, const Niz& niz); }; #endif
// niz.cpp - Klasa nizova apstraktnih predmeta. #include "niz.h" void Niz::kopiraj (const Niz &niz) { a = new Predmet* [n = niz.n]; for (int i=0; i<n; i++) a[i]=niz.a[i]->kopija(); } void Niz::brisi () { for (int i=0; i<n; delete niz[i++]); delete [] niz; } Niz& Niz::operator+= (const Predmet& p) { if (n == k) { k += k<50 ? 5 : k/10; Predmet** p = new Predmet* [k]; for (int i=0; i<n; i++) p[i] = a[i]; delete [] a; a = p; } a[n++] = p.kopija (); return *this; } ostream& operator<< (ostream& d, const Niz& niz) { for (int i=0; i<niz.n; i++) d << *niz.a[i] << ' '; return d; }
// kvadrat.h - Klasa kvadrata. #ifndef _kvadrat_h_ #define _kvadrat_h_ #include "predmet.h" class GStranica {}; class Kvadrat: public Predmet { double a; void pisi (ostream& d) const { d << "K(" << a <<')'; } public: Kvadrat (double aa = 1) { if (aa<=0) throw GStranica (); a = aa; } Kvadrat* kopija () const { return new Kvadrat (*this); } double S () const { return a * a; } }; #endif
// predmett.cpp - Ispitivanje klasa predmeta. #include "niz.h" #include "kvadrat.h" #include <iostream> using namespace std; int main () { Niz niz; try { while (true) { cout << "Kvadrat (a)? "; double a; cin >> a; niz += Kvadrat (a); } } catch (GStranica) {} try { Kvadrat* maxt = static_cast<Kvadrat*>(niz[0]); double maxs = maxt->S (); for (int i=1; i<+niz; i++) { Kvadrat* p = static_cast<Kvadrat*>(niz[i]); if (p->S() > maxs) { maxt = p; maxs = p->S (); } } cout << "Najveci kvadrat: " << *maxt << endl; } catch (GIndeks) { cout << "Niz je prazan!\n"; } }
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.