Advertisement
neogz

W6 - template

Feb 5th, 2015
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.29 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. template<class T1, class T2, int max>
  6. class FITKolekcija
  7. {
  8.     int _trenutno;
  9.     T1 *_elementi1[max];
  10.     T2* _elementi2[max];
  11. public:
  12.     ///////////////////////////////////////////////////////////////
  13.     //////////////////  konstruktor i destruktor //////////////////
  14.     ///////////////////////////////////////////////////////////////
  15.  
  16.     FITKolekcija(){
  17.         for (int i = 0; i < max; i++){
  18.             _elementi1[i] = nullptr;
  19.             _elementi2[i] = nullptr;
  20.         }
  21.         _trenutno = 0;
  22.     }
  23.     FITKolekcija(FITKolekcija & obj){
  24.         _trenutno = obj._trenutno;
  25.         for (int i = 0; i < _trenutno; i++){
  26.             elementi1[i] = obj._elementi1[i];
  27.             elementi2[i] = obj._elementi2[i];
  28.         }
  29.     }
  30.     ~FITKolekcija(){
  31.         for (int i = 0; i < _trenutno; i++){
  32.             delete [] _elementi1[i];
  33.             delete[] _elementi2[i];
  34.  
  35.  
  36.             _elementi1[i] = nullptr;
  37.             _elementi2[i] = nullptr;
  38.         }
  39.     }
  40.     /////////////////////////////////////////////////////////////
  41.     ////////////////    funkcije: dodaj, ispisi
  42.     ///////////////////////////////////////////////////////////////
  43.     void add(T1 e1, T2 e2){
  44.         if (_trenutno < max){
  45.             _elementi1[_trenutno] = new T1(e1);
  46.             _elementi2[_trenutno] = new T2(e2);
  47.             _trenutno++;
  48.         }
  49.         return;
  50.     }
  51.     void info(){
  52.         for (int i = 0; i < _trenutno; i++){
  53.             cout << *_elementi1[i] << " - " << *_elementi2[i] << endl;
  54.         }
  55.     }
  56.    
  57.     /////////////////////////////////////////////////////////////////////////////////////////////
  58.     //////   preklopljeni operatori:    <<      ()      []      -=         
  59.     ///////////////////////////////////////////////////////////////////////////////////////////////
  60.     /*
  61.         void operator = ( T1 e2){
  62.         T1 * temp = new T1(e1);
  63.         delete[]e1;
  64.         e1 = e2;
  65.         delete[]e2;
  66.         e2 = temp;
  67.        
  68.     }
  69.     void operator = (char * e2){
  70.         //pravimo novu kucicu temp za kopiranje
  71.         int vel = strlen(_elementi1) + 1;
  72.         char * temp = new char[vel];
  73.         strcpy_s(temp, vel, e1);
  74.  
  75.         delete[]e1; // brise e1 pa cemo spremiti e2 u e1 kucicu
  76.         int vel = strlen(e2) + 1;
  77.         e1 = new char[vel];
  78.         strcpy_s(e1, vel, e2);
  79.  
  80.         // e2 = temp
  81.         e2 = temp;
  82.         }
  83.         */
  84.    
  85.     friend ostream & operator << <>(ostream & COUT, FITKolekcija<T1, T2, max> & obj);
  86.     bool operator ()(T1 e1, T2 e2){
  87.         /* // i provjera ne radi xd
  88.         // provjera ima li e1 ili e2 u nizu već
  89.         for (int i = 0; i < _trenutno; i++){
  90.             if (_elementi1[i] == e1 || _elementi2[i] == e2) return false;
  91.         }
  92.         */
  93.         _elementi1[_trenutno] = new T1(e1);
  94.         _elementi2[_trenutno] = new T2(e2);
  95.         _trenutno++;
  96.  
  97.         return true;
  98.     }
  99.     T1 & operator [](int pozicija){
  100.         return *_elementi1[pozicija];
  101.     }
  102.     FITKolekcija & operator -= (int redniBroj){
  103.         // uklanja elemente sa pozicijom redni broj
  104.         delete[]_elementi1[redniBroj];
  105.         delete[]_elementi2[redniBroj];
  106.        
  107.         for (int i= redniBroj; i < _trenutno-1; i++){
  108.             _elementi1[i] = _elementi1[i + 1];
  109.             _elementi2[i] = _elementi2[i + 1];
  110.         }
  111.  
  112.         _elementi1[_trenutno] = nullptr;
  113.         _elementi2[_trenutno] = nullptr;
  114.  
  115.         _trenutno--;
  116.  
  117.         return *this;
  118.     }
  119.     /*
  120.         bool operator ()(char * e1, char * e2){
  121.         for (int i = 0; i < _trenutno; i++){
  122.             if (strcmp(_elementi1[i], e1) || strcmp(_elementi2[i], e2)) return false;
  123.         }
  124.         _elementi1[_trenutno] = new char(e1);
  125.         _elementi2[_trenutno] = new char(e2);
  126.         _trenutno++;
  127.  
  128.         return true;
  129.     }
  130.     */
  131.     ////////////////////////////////////////////////////////////////////////////////////////////////
  132.     ////////////////////////////////////////////////////////////////////////////////////////////////
  133.  
  134. };
  135. class Anketa
  136. {
  137.     char* _pitanje;
  138.     int _trajanje; //izraženo u danima
  139.     //Kolekcija treba da pohrani moguće odgovore na pitanja, sa pripadajućim rednim brojem
  140.     FITKolekcija<char*, int, 8> _odgovori;
  141. public:
  142.     ///////////////////////////////////////////////////////////////////////////////////////////////
  143.     ////////////////        KONSTRUKTOR I DESTRUKTOR
  144.     ///////////////////////////////////////////////////////////////////////////////////////////////
  145.     Anketa(){
  146.         _pitanje = nullptr;
  147.         _trajanje = 0;
  148.     }
  149.     Anketa(char * pitanje, int trajanje){
  150.         _trajanje = trajanje;
  151.  
  152.         int vel = strlen(pitanje) + 1;
  153.         _pitanje = new char[vel];
  154.         strcpy_s(_pitanje, vel, pitanje);
  155.     }
  156.     Anketa(Anketa & obj){
  157.         _trajanje = obj._trajanje;
  158.  
  159.         int vel = strlen(obj._pitanje) + 1;
  160.         _pitanje = new char[vel];
  161.         strcpy_s(_pitanje, vel, obj._pitanje);
  162.     }
  163.     ~Anketa(){
  164.         delete[]_pitanje;
  165.         _pitanje = nullptr;
  166.     }
  167.  
  168.     //////////////////////////////////////////////////////////////////////////////////////////////////////////
  169.     ////////////////        funkcija: dodajOdgovor      | operatori:        obj++       ++obj       =
  170.     //////////////////////////////////////////////////////////////////////////////////////////////////////////
  171.     void dodajOdgovor(char * odgovor, int brojPitanja){
  172.         _odgovori.add(odgovor, brojPitanja);
  173.     }
  174.     Anketa & operator = (Anketa & obj){
  175.         _trajanje = obj._trajanje;
  176.  
  177.         delete[]_pitanje;
  178.         int vel = strlen(obj._pitanje) + 1;
  179.         _pitanje = new char[vel];
  180.         strcpy_s(_pitanje, vel, obj._pitanje);
  181.     }
  182.     Anketa & operator ++ (){
  183.         _trajanje++;
  184.         return *this;
  185.     }
  186.     Anketa operator ++ (int){
  187.         // obj++
  188.         Anketa temp = *this;
  189.         _trajanje++;
  190.         return temp;
  191.     }
  192.     friend ostream & operator << (ostream & COUT, Anketa & anketa);
  193. };
  194.  
  195.  
  196. template<class T1, class T2, int max>
  197. ostream & operator << (ostream & COUT, FITKolekcija<T1,T2,max> & obj){
  198.     for (int i = 0; i < obj._trenutno; i++){
  199.         COUT << *obj._elementi1[i] << " - " << *obj._elementi2[i] << endl;
  200.     }
  201.     return COUT;
  202. }
  203. ostream & operator << (ostream & COUT, Anketa & anketa){
  204.     COUT << "Trajanje ankete: " << anketa._trajanje << endl;
  205.     COUT << "Anketno pitanje: " << anketa._pitanje << endl;
  206.     COUT << "Odgovori:" << endl;
  207.     COUT << anketa._odgovori;
  208.     return COUT;
  209. }
  210.  
  211. int main(){
  212.  
  213.     /*
  214.    
  215.     FITKolekcija<char*, char*, 100> imenikFITa;
  216.     imenikFITa.add("Nedim Fejzic", "062 121 155");
  217.     imenikFITa.add("Denis Music", "062 123 456");
  218.     imenikFITa.add("Saban Saulic", "062 123 456");
  219.     imenikFITa.add("FAJA", "062 123 456");
  220.     imenikFITa.add("Vinarici", "062 123 456");
  221.     imenikFITa("Citaona", "062 112 856");
  222.  
  223.     cout << imenikFITa << endl;
  224.  
  225.     imenikFITa -= 2; // uklanja pozicija 2
  226.     cout << imenikFITa << endl;
  227.  
  228.     cout << imenikFITa[1];
  229.     */
  230.    
  231.    
  232.     Anketa anketa("Da li je ovaj program tacan?", 2);
  233.     anketa.dodajOdgovor("DA", 1);
  234.     anketa.dodajOdgovor("NE", 1);
  235.     cout << anketa;
  236.  
  237.  
  238.  
  239.  
  240.     system("pause > null");
  241.     return 0;
  242. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement