![]() Ласло Краус |
Објектно програмирање 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.