L'exemple suivant montre comment surcharger l'operateur [].
La sortie écran est la suivante :
$ ./tableau Utilisation des methodes Set() et Get() Dans main() : t.Set(0, (0+1) * 10 ) Dans la classe Tableau : Appel de Set() avec i=0 Dans main() : t.Set(1, (1+1) * 10 ) Dans la classe Tableau : Appel de Set() avec i=1 Dans main() : t.Set(2, (2+1) * 10 ) Dans la classe Tableau : Appel de Set() avec i=2 Dans main() : t.Set(3, (3+1) * 10 ) Dans la classe Tableau : Appel de Set() avec i=3 Dans la classe Tableau : Appel de Get() avec i=0 Dans main() : t.Get(0) = 10 Dans la classe Tableau : Appel de Get() avec i=1 Dans main() : t.Get(1) = 20 Dans la classe Tableau : Appel de Get() avec i=2 Dans main() : t.Get(2) = 30 Dans la classe Tableau : Appel de Get() avec i=3 Dans main() : t.Get(3) = -1 Utilisation de [] surcharges Dans la classe Tableau : Appel de [] avec i=0 Dans main() : t[0] = (0+1) * 10 Dans la classe Tableau : Appel de [] avec i=1 Dans main() : t[1] = (1+1) * 10 Dans la classe Tableau : Appel de [] avec i=2 Dans main() : t[2] = (2+1) * 10 Dans la classe Tableau : Appel de [] avec i=3 Dans la classe Erreur : Constructeur (i=3) Dans main() : Indice 3 en dehors des limites lors de l'affectation Dans la classe Tableau : Appel de [] avec i=0 Dans main() : t[0] = 10 Dans la classe Tableau : Appel de [] avec i=1 Dans main() : t[1] = 20 Dans la classe Tableau : Appel de [] avec i=2 Dans main() : t[2] = 30 Dans la classe Tableau : Appel de [] avec i=3 Dans la classe Erreur : Constructeur (i=3) Dans main() : Indice 3 en dehors des limites lors de la lecture
Cela permet de formater une chaine en mémoire. C'est l'equivalent de la fonction snprintf(), la différence essentielle est que la chaine est préformatée a la compilation, de part la surcharge des operateurs <<.
Pour terminer le flux, on n'oublie pas std::ends (zero terminal) ou std::endl (retour chariot).
#include <stdio.h> #include <sstream> #include <string> int main() { std::stringstream strStream; // Formatage de la chaine strStream << "coucou " << 1234 << std::ends; // Affichage en C++ std::cout << "'" << strStream.str() << "'" << std::endl; // Affichage avec printf() printf( "'%s'\n", strStream.str().c_str() ); return 0; }
Affichage :
'coucou 1234' 'coucou 1234'
Tout programmeur C++ se doit de les utiliser.
Pour la documentation, il y a le site officiel de SGI
Bien utilisés, ils affranchissent le programmeur de libérer la mémoire, c'est en fait le pointeur intelligent qui s'en charge. Les smart pointers intègrent un mécanisme de comptage de référence.
Ils ne sont pas couverts pas les STL, qui ne propose que les auto_ptr (pas de comptage de référence)