Vidéo "étude de cas" (héritage)

Vidéo "étude de cas" (héritage)

by Katja Sophia Moos -
Number of replies: 1

Bonjour,

J'ai une question concernant la vidéo "étude de cas" de cette semaine avec les héritages:

Pourquoi n'avez-vous pas écrit la fonction "void combat(Dragon& glaurung, Hydre& bicephale)"  dans la classe "Creature" mais l'avez met au dehors?

Parce que pour moi la fonction "combat" est une action pour tous les creatures et donc j'ai pensé que c'est une fonction à laquelle tous les sous-classe doivent avoir l'accèss mais en même temps c'est une caracteristique de la super-classe "Creature".

Ou est-ce que c'est pas possible parce que "Dragon" et "Hydre" sont des sous-classes de la classe "Creature" est le compilateur ne reconnaît pas "Dragon" et "Hydre" si on met la fonction dans "Creature" parce que leurs définiton et après la classe "Creature"?

In reply to Katja Sophia Moos

Re: Vidéo "étude de cas" (héritage)

by Jean-Cédric Chappelier -

oui c'est essentiellement pour cela (et aussi parce que la donnée nous le demande ;-) ); mais plus pour des raisons de conception (= concepts) que « parce que le compilateur ne comprends pas » :
conceptuellement si on ne fait que combattre des Dragon et des Hydre, alors cela n'a rien à voir avec les Creature, en général.

Maintenant, comme évoqué à la fin de l'étude, on peut très bien concevoir que l'on veuille faire combattre n'importe quelles créatures entre elles (et ce sera certainement le cas dans un vrai jeu) et donc avoir :
void combat(Creature&, Creature&);
Ce qui, en effet pourrait tout aussi bien être:
void Creature::combat(Creature& autre);
en suivant les mêmes principes que ceux évoqués pour la surcharge des opérateurs (il n'y a pas de nouvelle créature et on pourrait avoir besoin d'accéder aux parties privées).
C'est, en fait, exactement l'objet des deux prochaines leçons : le polymorphisme.
La raison donc de ce choix dans la donnée est simplement qu'à ce stade là on ne saurait pas encore comment faire.
Donc, bravo pour votre compréhension !