template class TabIterator { public: TabIterator() { it = new T; std::cout << "TabIterator par défaut \n"; } TabIterator(T * pT) { it = pT; std::cout << "TabIterator par défaut \n"; } TabIterator & operator ++() { it = it + 1; std::cout << "++ Surcharge" << std::endl; return *this; } T operator *() { return *it; } TabIterator operator ++(int a) { TabIterator temp = *this; it = it + 1; std::cout << "Surcharge ++" << std::endl; return temp; } bool operator !=(const TabIterator & TbI) { if (TbI.it != it) return true; return false; } ~TabIterator() { std::cout << "Destruction TabIterator \n"; } template friend std::ostream & operator <<(std::ostream & os, const TabIterator & TbI); private: T * it; }; template std::ostream & operator <<(std::ostream & os, const TabIterator & TbI) { os << "L'itérateur pointe sur " << TbI.it << "\n"; return os; }