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");
}
# 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");
}