4.4 Intérêt d'utiliser des fonctions virtuelles

On peut s'en douté, si ça existe c'est sûrement que ça doit être utile dans certains cas, mais quels sont ces cas ?

Comme vous l'avez remarqué, nous avons alloué une Crevette sur un pointeur de Crustace, et une Langouste sur une pointeur de Crustace.

Donc si vous voulez mélanger des Crevettes est des Langoustes dans une liste, vous pouvez le faire si vous utilisez une liste de pointeurs de Crustace.

Cela permet de gagner en clarté, imaginons que vous voulez gérer un écosystème aquatique (ça m'arrangerai). Vous allez devoir faire une liste de Crevette, une liste de Langouste, une liste de Crabe, une liste de PoissonClown, une liste d'AnemoneDeMer, une liste de Corail...

Je pense que vous ne vous voyez pas manipuler autant de listes dans un programme, d'autant que vous allez sûrement oublier des espèces, il va donc falloir créer de nouvelles listes, et cela va finir par vous gonflé (ce qui est tout à fait normal).

Là vous voyez tout de suite l'avantage des fonctions virtuelles.

Tout des animaux ont des fonctions communes :

  • Manger
  • Chasser
  • Se dissimuler
  • Se reproduire

Vous pouvez dans ce cas faire une classe AnimalMarrin qui connaît ces fonctions virtuelles, et hérité de AnimalMarrin pour faire tout les autres animaux, vous allez pouvoir tous les mettre dans une liste de pointeurs de AnimalMarrin et vous serez heureux.

Et oui, mais comment je fais pour savoir qui est qui dans cette liste ?

Là je vous conseillerai de faire un enum, qui serait un attribut protected de AnimalMarrin qui donnerait l'espèce de l'animal en question, vous pourriez le définir comme ceci :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace AnimalMarrinOption {
	enum Type{
		CREVETTE,
		LANGOUSTE,
		ETOILEDEMER,
		CRABE,
		POISSONCLOWN,
		ANEMONEDEMER
		CORAIL,
		POULPE,
		CALMAR,
		LAMPROIE,
		PLONGEUR   //peut-être pas celui la, mais bon, vous m'avez compris
	};
};

Bien sur ce n'est qu'un exemple, mais vous avez maintenant la possibilité de mélanger plusieurs classes dans une liste.

Depuis tout à l'heure je vous parle de liste car si vous voulez faire un tableau il faudra faire un tableau de pointeurs ( un AnimalMarrin** dans notre cas).