Ласло Краус |
СИ2ОО1 Први колоквијум 30. 10. 2009. |
---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Које варијанте декларација функција су исправне и зашто?
int f(int a=0, int b=0);
int f(int a=0, int b);
int f(int a, int b=0);
int f(int a, int b);
б) Навести неки чест разлог да се пише конструктор копије и деструктор за класу.
в) Шта означава модификатор static
за неки атрибут класе? Која је разлика ако не постоји?
Написати на језику C++ следеће класе (класе опремити оним конструкторима и деструктором који су потребни за безбедно коришћење класа):
Beaz
, Arap
, Mavijan
, Tekir
, Darcin
. При клонирању (стварању копије) голуба, задржава се само боја оригинала и трајање најдужег лета, али не и прстен. Голуб може да се исписује на главном излазу у облику G(
прстен,
боја)
. Ако не постоји прстен, пише се "?
". Боја се исписује речима.
{
голуб1,
голуб2,…}
.
(10 поена) Написати на језику C++ програм који направи голубарник са неколико голубова од којих неки имају прстење, а затим испише на главном излазу формирани голубарник и голуба рекордера. Није потребно учитавати податке са главног улаза.
#include <iostream> using namespace std; class Prsten { int id; Prsten( const Prsten&) {} public: explicit Prsten( int iid) { id = iid; } int dohvId() const { return id; } void pisi() const { cout << id; } }; class Golub { public: enum Boja {BEAZ, ARAP, MAVIJAN, TEKIR, DARCIN}; private: static const char* boje[]; Prsten* prsten; Boja boja; double maxLet; public: Golub( Boja b, double mxLet) { prsten = 0; boja = b; maxLet = mxLet; } Golub( const Golub& g) { prsten = 0; boja = g.boja; maxLet = g.maxLet; } ~Golub() { delete prsten; } Prsten* dohvPrsten() const { return prsten; } Boja dohvboju() const { return boja; } double dohvMaxLet() const { return maxLet; } void postPrsten(Prsten* p) { delete prsten; prsten = p; } void pisi() const { cout << "G("; if (prsten) prsten->pisi(); else cout << '?'; cout << ',' << boje[boja] << ')'; } }; const char* Golub::boje[] = {"Beaz", "Arap", "Mavijan", "Tekir", "Darcin"}; class Golubarnik { bool bojaZadata; Golub::Boja boja; struct Elem { Golub* golub; Elem* sled; Elem( Golub* g) { golub = g; sled = 0; } ~Elem() { delete golub; } }; Elem *prvi, *posl; Golubarnik( const Golubarnik&) {} public: Golubarnik() { prvi = posl = 0; bojaZadata = false; } explicit Golubarnik( Golub::Boja b) { prvi = posl = 0; boja = b; bojaZadata = true; } ~Golubarnik(); bool ubaci( Golub* g) { if (bojaZadata && g->dohvboju()!=boja) return false; posl = (!prvi ? prvi : posl->sled) = new Elem( g); return true; } Golub* rekorder() const; void pisi() const; }; Golubarnik::~Golubarnik() { while (prvi) { Elem* stari = prvi; prvi = prvi->sled; delete stari; } } Golub* Golubarnik::rekorder() const { Golub* g = 0; double max = 0; for (Elem* tek=prvi; tek; tek=tek->sled) if (tek->golub->dohvMaxLet() > max) max = (g = tek->golub)->dohvMaxLet(); return g; } void Golubarnik::pisi() const { cout << '{'; for (Elem* tek=prvi; tek; tek=tek->sled) { tek->golub->pisi(); if (tek->sled) cout << ','; } cout << '}'; } int main () { Golubarnik golubarnik; Golub* g = new Golub( Golub::BEAZ, 20); g->postPrsten( new Prsten(55)); golubarnik.ubaci( g); g = new Golub( Golub::TEKIR, 25); golubarnik.ubaci( g); g = new Golub( Golub::ARAP, 25); g->postPrsten( new Prsten(32)); golubarnik.ubaci( g); golubarnik.pisi(); cout << endl; golubarnik.rekorder()->pisi(); cout << endl; return 0; }(⇒ почетак)
{G(55,Beaz),G(?,Tekir),G(32,Arap)} G(?,Tekir)
Copyright © 2011, Laslo Kraus
Последња ревизија: 4.11.2011.