Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Zadana je klasa je osnovna klasa Viza i izvedene klase PoslovnaViza i TurističkaViza.Kreirajte sve potrebne metode!
- #include <iostream>
- using namespace std;
- char * AlocirajNizKaraktera(const char * sadrzaj)
- {
- if (sadrzaj == nullptr)
- return nullptr;
- int vel = strlen(sadrzaj) + 1;
- char * temp = new char[vel];
- strcpy_s(temp, vel, sadrzaj);
- return temp;
- }
- class datum
- {
- int dan, mjesec, godina;
- public:
- //default-ni konstruktor
- datum()
- {
- dan = 0;
- mjesec = 0;
- godina = 0;
- }
- //korisnicki konstruktor
- datum(int d, int m, int g)
- {
- dan = d;
- mjesec = m;
- godina = g;
- }
- //konstruktor kopije
- datum(datum& d)
- {
- dan = d.dan;
- mjesec = d.mjesec;
- godina = d.godina;
- }
- //destruktor
- ~datum()
- {
- }
- //operator <<
- friend ostream & operator << (ostream & COUT, datum & obj)
- {
- COUT << obj.dan << "." << obj.mjesec << "." << obj.godina << "." << " ";
- return COUT;
- }
- int GetDan()
- {
- return dan;
- }
- int GetMjesec()
- {
- return mjesec;
- }
- int GetGodina()
- {
- return godina;
- }
- };
- //Klasa Viza je osnovna klasa – potrebno je dopisati sve metode
- class Viza {
- protected:
- char * _drzava;
- datum _vazenjeOD;
- datum _vazenjeDO;
- char * _napomena;
- public:
- //korisnički konstruktor
- Viza(const char * drzava, datum _OD, datum _DO, const char * napomena = nullptr): _vazenjeOD(_OD),_vazenjeDO(_DO)
- {
- _drzava = AlocirajNizKaraktera(drzava);
- _napomena = AlocirajNizKaraktera(napomena);
- }
- //destruktor
- ~Viza() {
- delete _drzava;
- _drzava = nullptr;
- if (_napomena != nullptr)
- {
- delete _napomena;
- _napomena = nullptr;
- }
- }
- //metoda GetVazenjaOD - vraca objekt tipa datum - datum od kad važi viza
- datum GetVazenjeOD()
- {
- return _vazenjeOD;
- }
- //metoda GetVazenjaDO - vraca objekt tipa datum - datum do kad važi viza
- datum GetVazenjeDO()
- {
- }
- //metoda vraća napomenu
- char * GetNapomena()
- {
- return _napomena;
- }
- //preklopiti operator <<
- friend ostream & operator << (ostream & COUT, Viza & obj)
- {
- COUT << obj._drzava << " " << obj._vazenjeOD << " " << obj._vazenjeDO << " " << obj._napomena;
- return COUT;
- }
- };
- //Klasa PoslovnaViza je izvedena klasa – potrebno je dopisati sve metode
- class PoslovnaViza :public Viza
- {
- char * _kompanija; //naziv kompanije koja potvrđuje da posluje sa aplikantom
- public:
- //korisnički konstruktor
- PoslovnaViza(const char * drzava, datum _OD, datum _DO,const char * kompanija, const char * napomena = nullptr):
- Viza(drzava,_OD,_DO,napomena)
- {
- _kompanija = AlocirajNizKaraktera(kompanija);
- }
- //preklopiti operator <<
- friend ostream & operator << (ostream & COUT, PoslovnaViza & obj)
- {
- COUT << obj._kompanija << " " << (Viza&)obj;
- return COUT;
- }
- //destruktor
- ~PoslovnaViza()
- {
- delete _kompanija;
- _kompanija = nullptr;
- }
- };
- //Klasa TuristickaViza je izvedena klasa – potrebno je dopisati sve metode
- class TuristickaViza : public Viza
- {
- char * _adresa; //adresa hotele ili drugog smještaja na kojoj će aplikant boraviti
- public:
- //korisnički konstruktor
- TuristickaViza(const char * drzava, datum _OD, datum _DO,const char * adresa,const char * napomena = nullptr) :Viza(drzava,_OD,_DO,napomena)
- {
- _adresa = AlocirajNizKaraktera(adresa);
- }
- //destruktor
- ~TuristickaViza()
- {
- delete _adresa;
- _adresa = nullptr;
- }
- //preklopiti operator <<
- friend ostream & operator << (ostream & COUT, TuristickaViza & obj)
- {
- COUT << obj._adresa << " " << (Viza&)obj;
- return COUT;
- }
- };
- template<class T1, class T2, int max>
- class FITKolekcija
- {
- int* _trenutno;
- T1 *_elementi1[max];
- T2 *_elementi2[max];
- public:
- //Kreirati potrebne konstruktore i destruktore
- FITKolekcija()
- {
- _trenutno = 0;
- for (size_t i = 0; i < max; i++)
- {
- _elementi1[i] = nullptr;
- _elementi2[i] = nullptr;
- }
- }
- FITKolekcija(FITKolekcija &k)
- {
- _trenutno = new int (*k._trenutno);
- for (size_t i = 0; i < *_trenutno; i++)
- {
- _elementi1[i] = new T1(k._elementi1[i]);
- _elementi2[i] = new T2(k._elementi2[i]);
- }
- }
- ~FITKolekcija()
- {
- delete trenutno;
- trenutno = nullptr;
- for (size_t i = 0; i < *_trenutno; i++)
- {
- delete _elementi1[i];
- _elementi1[i] = nullptr;
- delete _elementi2[i];
- _elementi2[i] = nullptr;
- }
- delete[] _elementi1;
- _elementi1 = nullptr;
- delete[] _elementi2;
- _elementi2 = nullptr;
- }
- //Preklopiti operator() na način da omogući dodavanje novih elemenata u kolekciju
- void operator () (T1 e1, T2 e2)
- {
- if (*_trenutno == max)
- return;
- *(_elementi1[*_trenutno]) = e1;
- *(_elementi2[*_trenutno]) = e2;
- (*_trenutno)++;
- }
- //metoda get za trenutni broj elemenata u kolekciji
- int trenutno() {
- return *_trenutno;
- }
- //Preklopiti operator za ispis.
- friend ostream& operator << (ostream &COUT, FITKolekcija &k)
- {
- COUT << k.*(_trenutno) << " " << k.(_elementi1[*_trenutno]) << " " << k.*(_elementi2[*_trenutno]);
- return COUT;
- }
- //metoda koja uklanja element na odabranoj poziciji
- void Uklonielement(int pozicija)
- {
- delete _elementi1[pozicija];
- _elementi1[pozicija] = nullptr;
- delete _elementi2[pozicija];
- _elementi2[pozicija] = nullptr;
- for (size_t i = pozicija; i < trenutno-1; i++)
- {
- *(_elementi1[i]) = *(_elementi1[i + 1]);
- *(_elementi2[i]) = *(_elementi2[i + 1]);
- }
- (*_trenutno)--;
- }
- };
- class Aplikant {
- char * _imePrezime;
- datum _datumRodjenja;
- char * _brojPasosa;
- public:
- FITKolekcija<PoslovnaViza, bool, 3> _vizePoslovne; //bool se odnosi na to da li je viza odobrena ili ne
- FITKolekcija< TuristickaViza, bool, 3> _vizeTuristicke;
- //kreirati potrebne konstruktore i destruktor
- //preklopiti operator <<
- };
- int main()
- {
- datum taj(1,12,1999);
- datum tajp(15,12,1999);
- Viza Emir("Bosna", taj, tajp, "Debil jedan");
- PoslovnaViza Emir2("Bosna", taj, tajp, "Kurta inovations", "Fin je sad");
- TuristickaViza Emir3("Bosna", taj, tajp, "Mehe Arapa 10", "Sad je jos bolji");
- cout << Emir << endl;
- cout << Emir2 << endl;
- cout << Emir3 << endl;
- cout << Emir2.GetNapomena() << endl;
- system("pause>0");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement