Advertisement
TheKurtA

Untitled

Apr 26th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.12 KB | None | 0 0
  1. //Zadana je klasa je osnovna klasa Viza i izvedene klase PoslovnaViza i TurističkaViza.Kreirajte sve potrebne metode!
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. char * AlocirajNizKaraktera(const char * sadrzaj)
  6. {
  7.     if (sadrzaj == nullptr)
  8.         return nullptr;
  9.     int vel = strlen(sadrzaj) + 1;
  10.     char * temp = new char[vel];
  11.     strcpy_s(temp, vel, sadrzaj);
  12.     return temp;
  13. }
  14.  
  15. class datum
  16. {
  17.     int dan, mjesec, godina;
  18. public:
  19.     //default-ni konstruktor
  20.     datum()
  21.     {
  22.         dan = 0;
  23.         mjesec = 0;
  24.         godina = 0;
  25.     }
  26.     //korisnicki konstruktor
  27.     datum(int d, int m, int g)
  28.     {
  29.         dan = d;
  30.         mjesec = m;
  31.         godina = g;
  32.  
  33.     }
  34.     //konstruktor kopije
  35.     datum(datum& d)
  36.     {
  37.         dan = d.dan;
  38.         mjesec = d.mjesec;
  39.         godina = d.godina;
  40.     }
  41.     //destruktor
  42.     ~datum()
  43.     {
  44.     }
  45.     //operator <<
  46.     friend ostream & operator << (ostream & COUT, datum & obj)
  47.     {
  48.         COUT << obj.dan << "." << obj.mjesec << "." << obj.godina << "." << " ";
  49.         return COUT;
  50.  
  51.     }
  52.     int GetDan()
  53.     {
  54.         return dan;
  55.     }
  56.     int GetMjesec()
  57.     {
  58.         return mjesec;
  59.     }
  60.     int GetGodina()
  61.     {
  62.         return godina;
  63.     }
  64.  
  65. };
  66. //Klasa Viza je osnovna klasa – potrebno je dopisati sve metode
  67. class Viza {
  68. protected:
  69.     char * _drzava;
  70.     datum _vazenjeOD;
  71.     datum _vazenjeDO;
  72.     char * _napomena;
  73. public:
  74.     //korisnički konstruktor
  75.     Viza(const char * drzava, datum _OD, datum _DO, const char * napomena = nullptr): _vazenjeOD(_OD),_vazenjeDO(_DO)
  76.     {
  77.  
  78.         _drzava = AlocirajNizKaraktera(drzava);
  79.         _napomena = AlocirajNizKaraktera(napomena);
  80.     }
  81.     //destruktor
  82.     ~Viza() {
  83.         delete _drzava;
  84.         _drzava = nullptr;
  85.         if (_napomena != nullptr)
  86.         {
  87.             delete _napomena;
  88.             _napomena = nullptr;
  89.         }
  90.     }
  91.  
  92.     //metoda GetVazenjaOD - vraca objekt tipa datum - datum od kad važi viza
  93.     datum GetVazenjeOD()
  94.     {
  95.         return _vazenjeOD;
  96.     }
  97.  
  98.     //metoda GetVazenjaDO - vraca objekt tipa datum - datum do kad važi viza
  99.     datum GetVazenjeDO()
  100.     {
  101.    
  102.     }
  103.  
  104.     //metoda vraća napomenu
  105.     char * GetNapomena()
  106.     {
  107.         return _napomena;
  108.     }
  109.  
  110.     //preklopiti operator <<
  111.     friend ostream & operator << (ostream & COUT, Viza & obj)
  112.     {
  113.         COUT << obj._drzava << " " << obj._vazenjeOD << " " << obj._vazenjeDO << " " << obj._napomena;
  114.         return COUT;
  115.     }
  116.  
  117. };
  118.  
  119. //Klasa PoslovnaViza je izvedena klasa – potrebno je dopisati sve metode
  120. class PoslovnaViza :public Viza
  121. {
  122.     char * _kompanija; //naziv kompanije koja potvrđuje da posluje sa aplikantom
  123. public:
  124.     //korisnički konstruktor
  125.     PoslovnaViza(const char * drzava, datum _OD, datum _DO,const char * kompanija, const char * napomena = nullptr):
  126.         Viza(drzava,_OD,_DO,napomena)
  127.     {
  128.         _kompanija = AlocirajNizKaraktera(kompanija);
  129.     }
  130.  
  131.     //preklopiti operator <<
  132.  
  133.     friend ostream & operator << (ostream & COUT, PoslovnaViza & obj)
  134.     {
  135.         COUT << obj._kompanija << " " << (Viza&)obj;
  136.         return COUT;
  137.     }
  138.     //destruktor
  139.     ~PoslovnaViza()
  140.     {
  141.         delete _kompanija;
  142.         _kompanija = nullptr;
  143.     }
  144.  
  145. };
  146.  
  147. //Klasa TuristickaViza je izvedena klasa – potrebno je dopisati sve metode
  148.  
  149. class TuristickaViza : public Viza
  150. {
  151.     char * _adresa; //adresa hotele ili drugog smještaja na kojoj će aplikant boraviti
  152. public:
  153.     //korisnički konstruktor
  154.     TuristickaViza(const char * drzava, datum _OD, datum _DO,const char * adresa,const char * napomena = nullptr) :Viza(drzava,_OD,_DO,napomena)
  155.     {
  156.         _adresa = AlocirajNizKaraktera(adresa);
  157.     }
  158.  
  159.     //destruktor
  160.  
  161.     ~TuristickaViza()
  162.     {
  163.         delete _adresa;
  164.         _adresa = nullptr;
  165.     }
  166.  
  167.     //preklopiti operator <<
  168.  
  169.     friend ostream & operator << (ostream & COUT, TuristickaViza & obj)
  170.     {
  171.         COUT << obj._adresa << " " << (Viza&)obj;
  172.         return COUT;
  173.     }
  174.  
  175. };
  176.  
  177. template<class T1, class T2, int max>
  178. class FITKolekcija
  179. {
  180.     int* _trenutno;
  181.     T1 *_elementi1[max];
  182.     T2 *_elementi2[max];
  183. public:
  184.  
  185.     //Kreirati potrebne  konstruktore i destruktore
  186.     FITKolekcija()
  187.     {
  188.         _trenutno = 0;
  189.         for (size_t i = 0; i < max; i++)
  190.         {
  191.             _elementi1[i] = nullptr;
  192.             _elementi2[i] = nullptr;
  193.         }
  194.        
  195.     }
  196.  
  197.     FITKolekcija(FITKolekcija &k)
  198.     {
  199.         _trenutno = new int (*k._trenutno);
  200.         for (size_t i = 0; i < *_trenutno; i++)
  201.         {
  202.             _elementi1[i] = new T1(k._elementi1[i]);
  203.             _elementi2[i] = new T2(k._elementi2[i]);
  204.         }
  205.     }
  206.  
  207.     ~FITKolekcija()
  208.     {
  209.         delete trenutno;
  210.         trenutno = nullptr;
  211.         for (size_t i = 0; i < *_trenutno; i++)
  212.         {
  213.             delete _elementi1[i];
  214.             _elementi1[i] = nullptr;
  215.             delete _elementi2[i];
  216.             _elementi2[i] = nullptr;
  217.         }
  218.         delete[] _elementi1;
  219.         _elementi1 = nullptr;
  220.         delete[] _elementi2;
  221.         _elementi2 = nullptr;
  222.     }
  223.  
  224.     //Preklopiti operator() na način da omogući dodavanje novih elemenata u kolekciju
  225.     void operator () (T1 e1, T2 e2)
  226.     {
  227.         if (*_trenutno == max)
  228.             return;
  229.         *(_elementi1[*_trenutno]) = e1;
  230.         *(_elementi2[*_trenutno]) = e2;
  231.         (*_trenutno)++;
  232.     }
  233.  
  234.     //metoda get za trenutni broj elemenata u kolekciji
  235.     int trenutno() {
  236.         return *_trenutno;
  237.     }
  238.  
  239.     //Preklopiti operator za ispis.
  240.     friend ostream& operator << (ostream &COUT, FITKolekcija &k)
  241.     {
  242.         COUT << k.*(_trenutno) << " " << k.(_elementi1[*_trenutno]) << " " << k.*(_elementi2[*_trenutno]);
  243.         return COUT;
  244.     }
  245.  
  246. //metoda koja uklanja element na odabranoj poziciji
  247.     void Uklonielement(int pozicija)
  248.     {
  249.         delete _elementi1[pozicija];
  250.         _elementi1[pozicija] = nullptr;
  251.         delete _elementi2[pozicija];
  252.         _elementi2[pozicija] = nullptr;
  253.         for (size_t i = pozicija; i < trenutno-1; i++)
  254.         {
  255.             *(_elementi1[i]) = *(_elementi1[i + 1]);
  256.             *(_elementi2[i]) = *(_elementi2[i + 1]);
  257.         }
  258.         (*_trenutno)--;
  259.     }
  260.  
  261. };
  262.  
  263. class Aplikant {
  264.     char * _imePrezime;
  265.     datum  _datumRodjenja;
  266.     char * _brojPasosa;
  267.  
  268. public:
  269.     FITKolekcija<PoslovnaViza, bool, 3> _vizePoslovne; //bool se odnosi na to da li je viza odobrena ili ne
  270.     FITKolekcija< TuristickaViza, bool, 3> _vizeTuristicke;
  271.  
  272.     //kreirati potrebne konstruktore i destruktor
  273.         //preklopiti operator <<
  274.  
  275. };
  276.  
  277.  
  278. int main()
  279. {
  280.     datum taj(1,12,1999);
  281.     datum tajp(15,12,1999);
  282.     Viza Emir("Bosna", taj, tajp, "Debil jedan");
  283.     PoslovnaViza Emir2("Bosna", taj, tajp, "Kurta inovations", "Fin je sad");
  284.     TuristickaViza Emir3("Bosna", taj, tajp, "Mehe Arapa 10", "Sad je jos bolji");
  285.     cout << Emir << endl;
  286.     cout << Emir2 << endl;
  287.     cout << Emir3 << endl;
  288.     cout << Emir2.GetNapomena() << endl;
  289.    
  290.     system("pause>0");
  291.     return 0;
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement