#include // DynamicArray.cpp #include "DynamicArray.h" // Remarque : pour acceder aux attributs et methodes de la classe // de base AbstractArray, il faut indiquer this->... pour y acceder ! // C'est a cause des templates ! // Exemple : this->_t // // On peut aussi ajouter AbstractArray:: // Exemple : AbstractArray::_t // ............................................ DynamicArray aDynamicArray; // .................................. DynamicArray aDynamicArray(capacity); template DynamicArray::DynamicArray(int capacity) : AbstractArray(capacity) { AbstractArray::_t = new T[capacity]; // for(int i = 0; i::_capacity; i++) // { // AbstractArray::_t[i] = T(); // } } // ......................................... DynamicArray aDynamicArray(a); template DynamicArray::DynamicArray(const DynamicArray& a) : AbstractArray(a) { _copy(a); } // ................................................... aDynamicArray = a; template DynamicArray& DynamicArray::operator=(const DynamicArray& a) { if(this != &a) { AbstractArray::operator=(a); _destroy(); _copy(a); } return *this; } // ...................... DynamicArray aDynamicArray(CArray,capacity); template DynamicArray::DynamicArray(const T* CArray, int capacity) : AbstractArray(CArray,capacity) { AbstractArray::_t = new T[capacity]; for(int i = 0; i < capacity; i++) { insert(CArray[i]); } } template DynamicArray::~DynamicArray(void) { _destroy(); } // ....................................... aDynamicArray.insert(element); template void DynamicArray::insert(const T& element) { if (AbstractArray::full()) { _realloc(2*AbstractArray::_capacity); } AbstractArray::_t[AbstractArray::_size++] = element; } // .................................................. aDynamicArray += a; template DynamicArray& DynamicArray::operator+=(const DynamicArray& a) { AbstractArray::operator+=(a); return *this; } // ............................................................. a1 + a2; template DynamicArray operator+(const DynamicArray& a1, const DynamicArray& a2) { DynamicArray aDynamicArray(a1); return aDynamicArray += a2; } // ...................................................... _copy(a); template void DynamicArray::_copy(const DynamicArray& a) { AbstractArray::_t = new T[AbstractArray::_capacity]; for(int i = 0; i ::_t[i] = a._t[i]; } } // ................................................... _destroy(); template void DynamicArray::_destroy(void) { if (AbstractArray::_t) delete [] AbstractArray::_t; AbstractArray::_t = NULL; } // ....................................... _realloc(newCapacity); template void DynamicArray::_realloc(int newCapacity) { if (AbstractArray::_capacity == newCapacity) return; T* newt = new T[newCapacity]; int limit = AbstractArray::_size < newCapacity ? AbstractArray::_size : newCapacity; for(int i = 0; i < limit; i++) { newt[i] = AbstractArray::_t[i]; } _destroy(); AbstractArray::_size = limit; AbstractArray::_capacity = newCapacity; AbstractArray::_t = newt; }