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