[c++] szablon klasy Array<T>

0

Bez STL napisz szablon klasy Array<T> zarządzającej tablicą elementów T o zmiennym dynamicznie rozmiarze. Zaimplementuj metody: 1. konstruktor 2. destruktor 3. bool add(const T&) 4. konstruktor kopiujący 5. operator przypisania.

Mój kod, w którym kompilator nie uznaje operatora przypisania (mam jakiś błąd). jestem początkującym programistą, dlatego z pewnością to zadania można by rozwiązać lepiej. Proszę o wszelkie propozycje zmian i wytknięcie błędów, poprawę kodu. Z pewnością się czegoś nauczę ;)

#include <iostream>
#include <string>

using namespace std;

template <class T>
class Array
{
      private:
         T * tablica;
         int ile; //ilość elementów w tablicy
         int i;   // indeks tablicy
      public:
         Array();
         ~Array();
         bool add(const T &);
         Array(const Array & wz); // konstruktor kopiujacy
         Array & operator=(const Array &);
         void Array<T>::wypisz();
};

template <class T>
  Array<T>::Array()
  {
    ile=  0; //ilość elementów
    i= -1;   // indeks tablicy
  }
template <class T>
  Array<T>::~Array()
  {
    delete [] tablica;
  }
  
template <class T>
  bool Array<T>::add(const T & elem)
  {
     i++;
     T tmp[i];

     for(int a=0; a< i; a++)
     {
       tmp[a]= tablica[a];
     }

     if(ile!=0)
     delete [] tablica;

     i++;
     if((tablica = new T [i]))
     {
     for(int b=0; b<i; b++)
     {
        tablica[b] = tmp[b];
     }
     tablica[ile]=elem;
     ile++;
     
     return true;
     }
     else
     return false;
}

template <class T>
   Array<T>::Array(const Array & wz)
   {
   
     tablica = new T [wz.ile];
     for(int a=0; a<wz.ile; a++)
     {
        tablica[a]=wz.tablica[a];
     }
     i= wz.i;
     ile= wz.ile;
   }
   
template <class T>
  void Array<T>::wypisz()
  {
    for(int i=0; i < ile; i++)
    {
      cout << tablica[i] << endl;
    }
  }
   
/*template <class T>
   Array & Array<T>::operator=(const Array & wz)
   {
     i=wz.i;
     ile=wz.ile;
     for(i=0; i<wz.ile; ile++)
     {
       tablica[i]=wz.tablica[i];
     }
     return *this;
   }*/
0

Mój kod, w którym kompilator nie uznaje operatora przypisania (mam jakiś błąd).

A jakiego typu argument przyjmuje ten operator? I co będzie, jeśli tablica będzie mniejsza od tablicy obiektu wz?

0
  1. popraw Array na Array<T> :P
    Array<T> & operator=(const Array<T> &);

template <class T>
   Array<T> & Array<T>::operator=(const Array<T> & wz)
   {
     i=wz.i;
     ile=wz.ile;
     for(i=0; i<wz.ile; ile++)
     {
       tablica[i]=wz.tablica[i];
     }
     return *this;
   }

1 użytkowników online, w tym zalogowanych: 0, gości: 1