Ласло Краус |
СИ2ОО1 Први колоквијум 2. 11. 2010. |
---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Навести разлику између појма декларације и дефиниције класе. Дати кратак пример декларације и дефиниције исте класе.
б) Да ли се може динамички створити (1) низ објеката (2) матрица објеката, тако што им се димензије одређују динамички?
в) Да ли је релација пријатељства између класа: (1) симетрична, (2) транзитивна, (3) наследна?
Написати на језику C++ следеће класе (класе опремити оним конструкторима и деструктором који су потребни за безбедно коришћење класа):
(10 поена) Написати на језику C++ програм који направи направи именик са неколико особа. Користити фиксне параметре – није потребно ништа учитавати са главног улаза.
#include <iostream> #include <cstring> using namespace std; class JMBG { char jmbg[14]; public: JMBG( const char j[]) { strcpy( jmbg, j); } const char* dohvJMBG() const { return jmbg; } bool veci(JMBG j) const { return strcmp(jmbg,j.jmbg)>0; } void pisi() const { cout << jmbg; } }; class Osoba { char* ime; JMBG jmbg; public: Osoba( const char* i, JMBG j): jmbg(j) { ime = new char [strlen(i)+1]; strcpy( ime, i); } Osoba( const Osoba& oso): jmbg(oso.jmbg) { ime=new char [strlen(oso.ime)+1]; strcpy( ime, oso.ime); } ~Osoba() { delete [] ime; } const char* dohvIme() const { return ime; } JMBG dohvJMGB() const { return jmbg; } void pisi() const { cout << ime << '('; jmbg.pisi(); cout << ')'; } }; class Imenik { struct Elem { Osoba oso; Elem* sled; Elem( const Osoba& o, Elem* s=0): oso(o) { sled = s; } }; Elem* prvi; public: Imenik() { prvi=0; } Imenik( const Imenik& im); ~Imenik(); Imenik& dodaj( const Osoba& oso); void pisi() const; }; Imenik::Imenik( const Imenik& im) { prvi = 0; for (Elem *tek=im.prvi, *posl=0; tek; tek=tek->sled) posl= (!prvi ? prvi : posl->sled) = new Elem( tek->oso); } Imenik::~Imenik() { while (prvi) { Elem* stari = prvi; prvi = prvi->sled; delete stari; } } Imenik& Imenik::dodaj( const Osoba& oso) { Elem *tek=prvi, *pret=0; while (tek && oso.dohvJMGB(). veci(tek->oso.dohvJMGB())) { pret = tek; tek = tek->sled; } Elem* novi = new Elem( oso, tek); (!pret ? prvi : pret->sled) = novi; return *this; } void Imenik::pisi() const { for (Elem* tek=prvi; tek; tek=tek->sled) { tek->oso.pisi(); cout<<endl; } } int main() { Imenik im; im.dodaj( Osoba("Marko", JMBG("1205982110022"))); im.dodaj( Osoba("Zoran", JMBG("1505980110022"))); im.dodaj( Osoba("Petar", JMBG("1207980110022"))); im.dodaj( Osoba("Stevo", JMBG("1205980110022"))); im.dodaj( Osoba("Milan", JMBG("1208980110022"))); im.pisi(); return 0; }(⇒ почетак)
Stevo(1205980110022) Marko(1205982110022) Petar(1207980110022) Milan(1208980110022) Zoran(1505980110022)
Copyright © 2010, Laslo Kraus
Последња ревизија: 9.12.2010.