#ifndef ABSTRACTARRAY_H // AbstractArray.h : tableau homogene #define ABSTRACTARRAY_H #define MAX 10 // Pour les fonctions friend template : // http://gnu.cict.fr/software/gcc/faq.html#friend #include using namespace std; template class AbstractArray; template ostream& operator<<(ostream& s, const AbstractArray& a); // export // ... En theorie, si on ajoute export, ca evite le template // #include "AbstractArray.cpp" du fichier du prg principal class AbstractArray { friend ostream& operator<< <>(ostream& s, const AbstractArray& a); public: // Constructeurs/destructeur AbstractArray(int capacity = MAX); // Constructeur par d´efaut AbstractArray(const AbstractArray& t); // Constructeur par recopie AbstractArray& operator=(const AbstractArray& t); // Affectation AbstractArray(const T* CArray, int capacity);// Constructeur par cousinage virtual ~AbstractArray(void); // Destructeur // Transtypage operator T*(void); // Inspecteurs int size(void) const; int capacity(void) const; bool empty(void) const; bool full(void) const; int has(const T& element) const; // retourne l’index ou -1 // Operateurs T& operator[](int index); const T& operator[](int index) const; bool operator==(const AbstractArray& a) const; bool operator!=(const AbstractArray& a) const; AbstractArray& operator+=(const AbstractArray& a); // friend AbstractArray operator+(const AbstractArray& a1, // => Classe // const AbstractArray& a2);// concrete! AbstractArray& operator<<(const T& element); AbstractArray& operator>>(T& element); T operator()(const T& t, T (*f)(const T&,const T&)) const; // Modifieurs virtual void insert(const T& element) = 0; // virtuelle pure virtual T remove(void); // virtuelle protected: int _size; // nombre d’elements dans le tableau int _capacity; // capacite du tableau T* _t; // tableau C dynamique private: // Utilitaires prives de : copie, desallocation virtual void _copy(const AbstractArray& t); // virtuelle virtual void _destroy(void); // virtuelle }; #endif // ABSTRACTARRAY_H