[ fanfare @ 15.02.2010. 20:59 ] @
Ako moze da neko prokomentarise kod koji sam napisao na sledeci zadatak: Definisati klasu Kolekcija, koja omogućava manipulaciju skupom objekata nekoga tipa. Kolekcija se stvara prazna zadatog početnog kapaciteta (podrazumijevano 10) i koraka povećanja ( podrazumijevano 5), poslije čega se elementi dodaju jedan po jedan na kraj niza (niz+=podatak). U slučaju prepunjavanja, kapacitet se povećava za zadati korak. Treba omogućiti da se: • spolja može dobiti broj elemenata u kolekciji; • spolja može dobiti podatak sa zadanim rednim brojem (niz[ind]); • iz kolekcije izvadi podatak zadatog rednog broja, pri čemu ostali elementi popunjavaju upražnjeno mjesto; • kolekcija isprazni; Nekorektan redni broj pri čitanju i vađenju podataka je greška. Greške treba prijavljivati objektima izuzecima, koji imaju mogućnost ispisivanja poruke o vrsti greške. A moj kod: Code: # include <iostream> using namespace std; class Izuzetak // da bi se kreirali objekti izuzeci { public: Izuzetak(char *s) : p(s) {} const char *opis() const { return p; } private: const char *p; }; template <class Tip,int N=10,int korak=5> class Kolekcija { public: Kolekcija() { n=-1; podatak=new Tip[N]; } Kolekcija( Kolekcija &k) { podatak=new Tip(*k.podatak); } Kolekcija &operator=(const Kolekcija &k) { podatak=k.podatak; return *this; ) Kolekcija &operator+=(const Kolekcija &k) { if (n>=N-1) N+=korak; // ako je kapacitet prepunjen podatak+=k.podatak; return *this; } int broj_elemenata { return n; } Tip operator[](int indeks) { return this->podatak[indeks]; } void izvadiPodatak (Tip &); void isprazni() { delete [] podatak; podatak=0; n=0; } ~Kolekcija() { isprazni(); } protected: Tip *podatak; int n; // broj elemenata u kolekciji }; template <class Tip,int N=10,int korak=5> void Kolekcija<Tip,N,korak> :: izvadiPodatak ( Tip &p) { for (int i=0; i<n; i++) if (podatak[i]==p) { for ( int j=i, k=j+1; k<n ; j++,k++) podatak[j]=podatak[k]; } }; main() { Kolekcija <int,5,2> k; k.podatak={1,2,3,4,5}; try { int indeks; cout<<"koji podatak zelite procitati u nizu?"; cin>>indeks; if (indeks>=N-1) throw Izuzetak ("Nekorektan broj pri citanju!\n"); } catch ( Izuzetak t ) { cout << "Greska: " << t.opis(); } system("pause"); } |