4.1 Un premier test

Je vous en ai déjà un peu parler, pour les destructeurs du moins. Mais à quoi peuvent-elles bien servir. Elles permettent d'appeler des fonctions d'une classe fille à partir de la classe mère.

Comment est-ce possible, et à quoi ça sert ?

Nous allons faire un petit exemple, mais pour cela il va falloir ajouter une fonction à notre classe Crustace.

Donc, dans le fichier crustace.h nous allons ajouter la fonction parler (la même que pour Crevette ou Langouste) en tant que fonction publique :

1
void parler();

Et dans le fichier crustace.cpp :

1
2
3
void Crustace::parler(){
	cout << "My name is " << p_nom << endl;
}

Oui, bon, le Crustace parle anglais, mais c'est pour l'exemple.

Modifions le fichier main.cpp :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include "crustace.h"
#include "crevette.h"
#include "langouste.h"

int main(int argc, char** argv){
	Crevette crevette("Bond");
	crevette.parler();
	
	Langouste langouste("Gurt", 23);
	langouste.parler();
	
	Crustace crustace("Harry");
	crustace.parler();
	
	return 0;
}

Appelons CMake :

cmake ..
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done

Compilons avec make :

make
Scanning dependencies of target crustace
[ 25%] Building CXX object CMakeFiles/crustace.dir/crustace.cpp.o
[ 50%] Building CXX object CMakeFiles/crustace.dir/crevette.cpp.o
[ 75%] Building CXX object CMakeFiles/crustace.dir/langouste.cpp.o
[100%] Building CXX object CMakeFiles/crustace.dir/main.cpp.o
Linking CXX executable crustace
[100%] Built target crustace

Exécutons le programme :

./crustace 
constructeur de Crustace
constructeur de crevette
 je m’appelle Bond
constructeur de Crustace
constructeur de Langouste
ich Aufruf Gurt haben Sie 23 Jahre.
constructeur de Crustace
My name is Harry
destructeur de Crustace
destructeur de Langouste
destructeur de Crustace
destructeur de crevette
destructeur de Crustace

Jusque là rien à changer. Mais continuons.

Vous constaterez au passage que la dernière variable à avoir été créée est la première à être détruite.

Mais c'est pas le tout, quand est-ce que ça change ?

Regardons avec des pointeurs.