![]() Ласло Краус |
Објектно програмирање - колоквијуми Први колоквијум 12. 4. 2008. |
---|
Особа садржи име и број телефона у облику ниска знакова. Написати на језику C++ класу за особе. Предвидети:
osba1=osoba2
),
it<<osoba
).
Именик садржи низ показивача на особе одређеног капацитета. Написати на језику C++ класу за именике. Предвидети:
imenik1=imenik2
),
imenik+=osoba
; ако већ постоји особа с истим именом, само се замени стара особа с новом; препуњавање именика прекида програм),
imenik[ind]
; индекс изван дозвољеног опсега прекида програм; дохваћена особа не сме да се промени),
it<<imenik
).
Написати на језику C++ програм који прочита с главног улаза задати број особа стављајући их у именик и после испише на главном излазу садржај именика.
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.I:
(Nastava on \\Xs200-2).
.h
и .cpp
датотека (сваку класу одвојено у једну или две датотеке) – не стављати целокупно решење у једну датотеку.
// osoba.cpp #include <iostream> #include <cstring> using namespace std; class Osoba { char *ime, *tlf; void kopiraj (const char* i, const char* t) { ime = new char [strlen(i)+1]; strcpy (ime, i); tlf = new char [strlen(t)+1]; strcpy (tlf, t); } void brisi () { delete [] ime; delete [] tlf; } public: Osoba (const char* i, const char* t) { kopiraj (i, t); } Osoba (const Osoba& os) { kopiraj (os.ime, os.tlf); } ~Osoba () { brisi (); } Osoba& operator= (const Osoba &os) { if (this != &os) {brisi(); kopiraj(os.ime,os.tlf);} return *this; } const char* uzmiIme () const { return ime; } const char* uzmiTlf () const { return tlf; } friend ostream& operator<< (ostream& it, const Osoba& os) { return it << os.ime << "[" << os.tlf << "]"; } };(садржај)
// imenik.h #include "osoba.h" #include <iostream> #include <cstring> using namespace std; class Imenik { Osoba** niz; int kap, duz; void kopiraj (const Imenik& imen); void brisi (); public: explicit Imenik (int k=10) { niz = new Osoba* [kap = k]; duz = 0; } Imenik (const Imenik& imen) { kopiraj (imen); } ~Imenik () { brisi (); } Imenik& operator= (const Imenik& imen){ if (this != &imen) { brisi (); kopiraj (imen); } return *this; } int brOsoba () const { return duz; } Imenik& operator+= (const Osoba& oso); const Osoba& operator[] (int i) const { if (i<0 || i>=duz) exit (1); return *niz[i]; } friend ostream& operator<< (ostream& it, const Imenik& imen); };
// imenik.cpp #include "imenik.h" void Imenik::kopiraj(const Imenik& imen){ niz = new Osoba* [kap = imen.kap]; duz = imen.duz; for (int i=0; i<duz; i++) niz[i] = new Osoba (*imen.niz[i]); } void Imenik::brisi () { for (int i=0; i<duz; delete niz[i++]); delete [] niz; } Imenik& Imenik::operator+= (const Osoba& oso) { int i=0; while (i<duz && strcmp(oso.uzmiIme(),niz[i]->uzmiIme())!=0); i++; if (i < duz) *niz[i] = oso; else { if (duz == kap) exit (2); niz[duz++] = new Osoba (oso); } return *this; } ostream& operator<< (ostream& it, const Imenik& imen) { for (int i=0; i<imen.duz; it<<*imen.niz[i++]<<endl); return it; }
// test.cpp #include "imenik.h" #include <iostream> using namespace std; int main () { int n; cout << "n? "; cin >> n; Imenik imen (n); for (int i=0; i<n; i++) { cout << "ime,tlf? "; char ime[20], tlf[20]; cin >> ime >> tlf; imen += Osoba (ime, tlf); } cout << imen; return 0; }
n? 5 ime,tlf? marko 123456 ime,tlf? petar 555555 ime,tlf? zoran 172839 ime,tlf? petar 654321 ime,tlf? milan 926215 marko[123456] petar[654321] zoran[172839] milan[926215]
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.