![]() Ласло Краус |
Објектно програмирање 1 - колоквијуми Први колоквијум 20. 4. 2013. |
---|
Вест има наслов и садржај (ниске произвољне дужине). Написати на језику C++ класу за вести. Предвидети:
vest1=vest2
);
it<<vest
) у облику наслов[
садржај]
.
Часопис има назив (ниска произвољне дужине), датум (дугачак цео број по шеми ggggmmdd
) и садржи листу вести. Написати на језику C++ класу за часописе. Предвидети:
casopis1=casopis2
);
casopis+=vest
);
casopis[naslov]
; повратна вредност је нула ако таква вест не постоји; дохваћена вест не сме да се промени по завршетку операције); и
it<<casopis
; први ред је облика назив(
датум)
, а у наредним редовима пишу се садржане вести ред по ред).
Написати на језику C++ програм који направи један часопис, додаје неколико вести, испише часопис на главном излазу и испише вест задатог наслова на главном излазу. Користити константне параметре (не треба ништа учитавати с главног улаза).
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.Z:
.
// vest.h #include <cstring> #include <iostream> using namespace std; class Vest { char *nasl, *sadr; void kopiraj(const char* n, const char* s) { nasl = new char [strlen(n)+1]; strcpy(nasl, n); sadr = new char [strlen(s)+1]; strcpy(sadr, s); } void brisi() { delete [] nasl; delete [] sadr; } public: Vest(const char* n, const char* s) { kopiraj(n, s); } Vest(const Vest& v) { kopiraj(v.nasl, v.sadr); } ~Vest() { brisi(); } Vest& operator=(const Vest&v) { if (this != &v) { brisi(); kopiraj(v.nasl, v.sadr); } return *this; } const char* naslov() const { return nasl; } const char* sadrzaj() const { return sadr; } friend ostream& operator<<(ostream& it, const Vest&v) { return it<< v.nasl << '[' << v.sadr << ']'; } };(садржај)
// casopis.h #include "vest.h" #include <iostream> using namespace std; class Casopis { struct Elem { Vest vest; Elem* sled; Elem(const Vest& v): vest(v) { sled=0; } }; Elem *prvi, *posl; char* naz; long dat; void kopiraj(const Casopis& n); void brisi(); public: Casopis(const char* n, long d) { naz = new char [strlen(n)+1]; strcpy(naz, n); dat = d; prvi = posl = 0; } Casopis(const Casopis& cp) {kopiraj(cp);} ~Casopis() { brisi(); } Casopis& operator=(const Casopis& cp) { if (this != &cp) { brisi(); kopiraj(cp); } return *this; } Casopis& operator+=(const Vest& v) { Elem* novi = new Elem(v); if (!prvi) prvi = novi; else posl->sled = novi; posl = novi; return *this; } const Vest* operator[](const char* nasl) const; friend ostream& operator<<(ostream& it, const Casopis& cp); };
// casopis.cpp #include "casopis.h" void Casopis::kopiraj(const Casopis& cp) { naz = new char [strlen(cp.naz)+1]; strcpy(naz, cp.naz); dat = cp.dat; prvi = posl = 0; for (Elem* tek=cp.prvi; tek; tek=tek->sled){ Elem* novi = new Elem(tek->vest); if (!prvi) prvi = novi; else posl->sled = novi; posl = novi; } } void Casopis::brisi() { delete [] naz; while (prvi) { Elem* stari=prvi; prvi=prvi->sled; delete stari; } } const Vest* Casopis::operator[](const char* nasl) const { for (Elem* tek=prvi; tek; tek=tek->sled) if (strcmp(nasl, tek->vest.naslov())==0) return &tek->vest; return 0; } ostream& operator<<(ostream& it, const Casopis& cp) { it << cp.naz << '(' << cp.dat << ')' << endl; for(Casopis::Elem* tek=cp.prvi; tek; tek=tek->sled) it << tek->vest << endl; return it; }
// program.cpp #include "casopis.h" #include <iostream> using namespace std; int main() { Casopis cpis("Blic", 20130420); cpis += Vest("naslov1", "sadrzaj1"); cpis += Vest("naslov2", "sadrzaj2"); cpis += Vest("naslov3", "sadrzaj3"); cpis += Vest("naslov4", "sadrzaj4"); cout << cpis << endl; if (const Vest* pv = cpis["naslov3"]) cout << *pv << endl; else cout << "*** Vest ne postoji!" << endl; return 0; }
Blic(20130420) naslov1[sadrzaj1] naslov2[sadrzaj2] naslov3[sadrzaj3] naslov4[sadrzaj4] naslov3[sadrzaj3]
Copyright © 2013, Laslo Kraus
Последња ревизија: 15.6.2013.