Ласло Краус |
ИР2ОО1 Први колоквијум 11. 12. 2004. |
---|
Пројектовати на језику C++ следећи систем класа (класе опремити оним конструкторима, деструктором и оператором за доделу вредности, који су потребни):
k1<k2
), да се димензије купе прочитају из датотеке (dat>>k
) и да се купа уписује у датотеку (dat<<k
) у облику K(
r1,
r2,
h)
.
niz+=k
), док се низ не напуни (ако се низ препуни, програм се прекида). Може да се дохвата капацитет низа, број попуњених места и може да се испита да ли је низ попуњен до краја. Купе садржане у низу могу да се дохватају (niz[i]
) и да се проналази индекс купе најмање запремине (!niz
).
(20 поена) Саставити на језику C++ главни програм који са главног улаза прочита низ зарубљених купа, проналази купу најмање запремине у низу, испише пронађену купу и њену запремину на главном излазу и понавља претходне кораке док за дужину низа не прочита недозвољену вредност.
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Шта представља показивач this
, којег је типа и да ли се може користити у статичкој функцији чланици неке класе?
б) Навести редослед активности при конструкцији и деструкцији објеката (основних класа).
в) Којег типа треба да буде аргумент копирајућег конструктора класе X
?
г) Шта су специфичности преклапања оператора new
и delete
? Образложити.
#include <iostream> #include <cstdlib> using namespace std; class Kupa { double r1, r2, h; public: explicit Kupa (double rr1=2, double rr2=1, double hh=1) { r1 = rr1; r2 = rr2; h = hh; } double R1 () const { return r1; } double R2 () const { return r2; } double H () const { return h; } double V () const { return 3.14159 * h * (r1*r1 + r2*r2 + r1*r2); } bool operator< (const Kupa& k2) const { return V () < k2.V (); } friend istream& operator>> (istream& d, Kupa& k) { return d >> k.r1 >> k.r2 >> k.h; } friend ostream& operator<< (ostream& d, const Kupa& k) { return d << "K(" << k.r1 << ',' << k.r2 << ',' << k.h << ')'; } }; class Niz { int kap, duz; Kupa* kupe; void kopiraj (const Niz&); void brisi() { delete [] kupe; } public: explicit Niz (int k=5) { kupe = new Kupa [kap = k]; duz = 0; } Niz (const Niz& niz) { kopiraj (niz); } ~Niz () { brisi (); } Niz& operator= (const Niz& niz) { if (this != &niz) { brisi (); kopiraj (niz); } return *this; } Niz& operator+= (const Kupa& k) { if (duz == kap) exit (1); kupe[duz++] = k; return *this; } int uzmiKap () const { return kap; } int uzmiDuz () const { return duz; } bool pun () const { return duz == kap; } Kupa& operator[] (int i) { if (i<0 || i>=duz) exit (2); return kupe[i]; } const Kupa& operator[] (int i) const { if (i<0 || i>=duz) exit (2); return kupe[i]; } int operator! () const; }; void Niz::kopiraj (const Niz& niz) { kupe = new Kupa [kap = niz.kap]; duz = niz.duz; for (int i=0; i<duz; i++) kupe[i] = niz.kupe[i]; } int Niz::operator! () const { if (! duz) return -1; Kupa min = kupe[0]; int imin = 0; for (int i=0; i<duz; i++) if (kupe[i] < min) { min = kupe[i]; imin = i; } return imin; } int main () { while (true) { cout << "n? "; int n; cin >> n; if (n <= 0) break; Niz niz (n); for (int i=0; i<n; i++) { cout << "kupa[" << i << "]? "; Kupa k; cin >> k; niz += k; } int imin = !niz; cout << "min= " << niz[imin] << " (" << niz[imin].V() << ")\n\n"; } }(⇒ почетак)
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.