Ласло Краус |
СИ2ОО1 Први колоквијум 3. 11. 2007. |
---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Да ли су дозвољени показивачи на референце? Зашто?
б) За класу X написати декларације подразумеваног конструктора, конструктора копије и конструктора за конверзију из класе Y.
в) Да ли се из локалне класе може директним именовањем приступити: (1) статичком локалном податку и (2) аутоматском локалном податку обухватајуће функције? Образложити.
Написати на језику C++ следеће класе (класе опремити оним конструкторима и деструктором који су потребни за безбедно коришћење класа):
10(deset)
).
:
оцена".
ggggrrrr
, где су g
и r
цифре године уписа и регистарског броја) и низ испита задатог капацитета (подразумевано 40). Ствара се без иједног испита после чега испити могу да се додају један по један. Повратна вредност при додавању испита показује успех додавања (тј. да ли је било места у низу испита). Не сме да се прави копија студента. Може да се израчуна средња вредност оцена положених испита и да се студент испише на главном излазу у облику "име[
годУп/
регБр:
срОцена]
".
(10 поена) Написати на језику C++ програм који направи једног студента, додаје му три испита и испише га на главном излазу. Користити само константне податке (не треба ништа учитавати с главног улаза).
#include <iostream> #include <cstring> using namespace std; class Ocena { int oce; static const char* opisi[]; public: Ocena (int oc) { if (oc < 5) oc = 5; if (oc > 10) oc = 10; oce = oc; } int ocena () const { return oce; } const char* opis () const{ return opisi[oce-5]; } void pisi () const { cout << oce << '(' << opis() << ')'; } }; const char* Ocena::opisi[] = {"pet", "sest", "sedam", "osam", "devet", "deset"}; class Ispit { char sif[7]; Ocena oce; public: Ispit (char sif[], Ocena oce) : oce(oce) { strcpy (this->sif,sif); } const char* sifra () const { return sif; } Ocena ocena () const { return oce; } void pisi () const { cout << sif << ':'; oce.pisi(); } }; class Student { char* ime; long ind; Ispit** ispiti; int kap, duz; Student (const Student&) {} public: Student (const char* ime, int ind, int k=40) { this->ime = new char [strlen(ime)+1]; strcpy (this->ime, ime); this->ind = ind; ispiti = new Ispit* [kap = k]; duz = 0; } ~Student (); bool dodaj (const Ispit &isp) { if (duz == kap) return false; ispiti[duz++] = new Ispit (isp); return true; } double srOcena () const; void pisi () const { cout << ime << '[' << (ind/10000) << '/' << (ind%10000) << ':' << srOcena() << ']'; } }; Student::~Student () { delete [] ime; for (int i=0; i<duz; delete ispiti[i++]); delete [] ispiti; } double Student::srOcena () const { double s = 0; int n = 0; for (int i=0; i<duz; i++) if(ispiti[i]->ocena().ocena() > 5) { s+=ispiti[i]->ocena().ocena(); n++; } if (n) s /= n; return s; } int main () { Student marko("Marko",20060055,45); marko.dodaj (Ispit("SI2AS2",9)); marko.dodaj (Ispit("SI2OR2",5)); marko.dodaj (Ispit("SI2OO1",10)); marko.pisi(); cout << endl; return 0; }(⇒ почетак)
Marko[2006/55:9.5]
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.