Ласло Краус |
СИ2ОО1 Први колоквијум 25. 10. 2011. |
---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Где се у C++ програму могу појавити дефиниције објеката (у ширем смислу) и зашто? Која је разлика у односу на језик C?
б) Да ли је дозвољена имплицитна конверзија целобројне вредности у набројиви тип и обрнуто и зашто?
в) Написати пример једноставне класе која обезбеђује да се могу стварати само њени динамички објекти.
Написати на језику C++ следеће класе (класе опремити оним конструкторима и деструктором који су потребни за безбедно коришћење класа):
(
isbn)
.
(10 поена) Написати на језику C++ програм који направи издавача с неколико књига и испише га на главном излазу. Користити фиксне параметре – није потребно ништа учитавати с главног улаза.
#include <iostream> #include <cstring> using namespace std; class ISBN { char sbn[14]; public: ISBN(char bn[]) { strcpy(sbn,bn); } const char* isbn() const { return sbn; } bool isti(const ISBN& bn) const { return strcmp(sbn,bn.sbn)==0; } void pisi() const { cout << sbn; } }; class Knjiga { char* nasl; ISBN sbn; void kopiraj(const char* nas) { nasl = new char [strlen(nas)+1]; strcpy(nasl, nas); } public: Knjiga(const char* nas, const ISBN& bn): sbn(bn) { kopiraj(nas); } Knjiga(const Knjiga& k): sbn(k.sbn) { kopiraj(k.nasl); } ~Knjiga() { delete [] nasl; } const char* naslov() const { return nasl; } const ISBN& isbn() const { return sbn; } void pisi() const { cout << nasl << " ("; sbn.pisi(); cout << ')'; } }; class Izdavac { char* naz; Knjiga** knjige; int kap, brk; public: explicit Izdavac(const char* nnaz, int k=10) { naz = new char [strlen(nnaz)+1]; strcpy(naz, nnaz); knjige = new Knjiga* [kap = k]; brk = 0; } Izdavac(const Izdavac& izd); ~Izdavac(); const char* naziv() const { return naz; } bool dodaj(const Knjiga& k); void pisi() const; }; Izdavac::Izdavac(const Izdavac& izd){ naz = new char [strlen(izd.naz)+1]; strcpy(naz, izd.naz); knjige = new Knjiga* [kap = izd.kap]; brk = izd.brk; for (int i=0; i<brk; i++) knjige[i] = new Knjiga(*izd.knjige[i]); } Izdavac::~Izdavac() { delete [] naz; for (int i=0; i<brk; delete knjige[i++]); delete [] knjige; } bool Izdavac::dodaj(const Knjiga& k){ if (brk == kap) return false; for (int i=0; i<brk; i++) if (knjige[i]->isbn().isti(k.isbn())) return false; knjige[brk++] = new Knjiga(k); return true; } void Izdavac::pisi() const { cout << naz << " (" << brk << ")\n"; for (int i=0; i<brk; i++) { knjige[i]->pisi(); cout << '\n'; } } int main () { Izdavac izd("Akademska misao"); izd.dodaj(Knjiga("Programski jezik C", ISBN("9788674664118"))); izd.dodaj(Knjiga("Programski jezik C++", ISBN("9788674664127"))); izd.dodaj(Knjiga("Programski jezik C#", ISBN("9788674664136"))); izd.dodaj(Knjiga("Programski jezik Java", ISBN("9788674664145"))); izd.dodaj(Knjiga("Programski jezik C", ISBN("9788674664118"))); izd.pisi(); return 0; }(⇒ почетак)
Akademska misao (4) Programski jezik C (9788674664118) Programski jezik C++ (9788674664127) Programski jezik C# (9788674664136) Programski jezik Java (9788674664145)
Copyright © 2011, Laslo Kraus
Последња ревизија: 28.11.2011.