Ласло Краус |
СИ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.