constructeur par défaut

Le constructeur en C++ n’a pas de type de retour et porte le même nom que la classe. Celui-ci est appelé après l’étape de réservation des ressources nécessaires à la création de l’instance.

Ajouter un constructeur par défaut (sans argument) dans la classe CharSequence. Ce constructeur se contentera d’afficher une message tel que :

std::cout << __FILE__ << '(' << __LINE__ << "): "
          << __func__ << ' ' << this << std::endl;

Vérifier que les instances sont bien créées.

destructeur

Le destructeur est une méthode de la classe appelée lors de la destruction de l’objet, avant la libération des ressources associées à l’instance. Le destructeur n’a pas de type de retour et a pour nom le nom de classe préfixé du caractère ~.

De même que pour le constructeur par défaut, ajouter un destructeur qui trace les appels à celui-ci.

Tester votre programme et vérifier les appels au destructeur.

constructeur et allocation

Dans la classe CharSequence, ajouter un attribut privé _data de type char *.

Écrire le constructeur qui prend en argument une chaîne de caractères (const char *) se terminant par un ’\0’ et qui recopie cette chaîne dans _data avec la fonction strncpy (#include <cstring>).

  • Modifier le programme pour tester ce nouveau constructeur.
  • Compiler et executer avec valgrind.
  • Corriger si nécessaire.

état par défaut

Effectuer l’initialisation de l’instance dans le constructeur par défaut et vérifier que tout se passe bien (compilation, exécution, valgrind).

getter

Écrire une méthode char get(unsigned int i) permettant d’obtenir le ième caractère de la chaîne.

passage par valeur.

Ajouter dans le programme principal la fonction suivante :

void foo(CharSequence s){}

Appeler cette fonction dans le main, compiler, tester avec valgrind. Analyser l’exécution de votre programme à l’aide de gdb.

Expliquer le comportement observé, pensez à indiquer clairement la succession d’allocations et d’instanciations effectuées.