4.2 Appel des fonctions parler sur des pointeurs de Crustace

Nous n'allons pas regarder avec des pointeurs de Crevette et de Langouste car ça serait pareil que dans le cas que l'on vient de faire.

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){
	Crustace* crevette = new Crevette("Bond");
	crevette->parler();
	
	Crustace* langouste = new Langouste("Gurt", 23);
	langouste->parler();
	
	delete crevette;
	delete langouste;
	
	return 0;
}

Oui, vous avez bien vu, on alloue un Crustace avec le constructeur d'une Crevette ou d'une Langouste.

Il ne faut pas oublier de désallouer les pointeurs que l'on a alloués.

Compilons :

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

Regardons le résultat :

./crustace 
constructeur de Crustace
constructeur de crevette
My name is Bond
constructeur de Crustace
constructeur de Langouste
My name is Gurt
destructeur de crevette
destructeur de Crustace
destructeur de Langouste
destructeur de Crustace

Mais c'est nul, on à bien les bons prénoms, mais on a pas la bonne langue.

Et bien, on a le parlé du Crustace, car dans ce cas c'est sa fonction parler qui est appelée.

Comment faire alors ?

Il faut utiliser le mot clé virtual.