Particularités du c++

Surcharge de l'operateur []

L'exemple suivant montre comment surcharger l'operateur [].

tableau.cpp

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

Les streams en mémoire

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'

Les STLs

Tout programmeur C++ se doit de les utiliser.

Pour la documentation, il y a le site officiel de SGI

Les smart pointers

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)

Liens

Valid XHTML 1.0!