Salut à tous,
Voilà je vais avoir partiel et le prof a publier quelques archives malheureusement je ne comprends pas du tout la dernière question un longuette :
Il est clair (pour la biologie du moins) que les humains (classe Human) sont des animaux (classe
Animal). On a donc
(On ne s’intéresse pas ici aux détails internes de ces classes). Et on a aussi une conversion implicite à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 class Animal { ... }; class Human : public Animal { ... };
la compilation d’un humain en animal, permettant d’écrire par exemple :
ou encore
Code : Sélectionner tout - Visualiser dans une fenêtre à part Animal a = Human();
Cependant, pour le compilateur deux instances d’une classe template définissent des types différents
Code : Sélectionner tout - Visualiser dans une fenêtre à part Animal *a = new Human();
dès que les paramètres templates effectifs sont différents : les deux types n’ont alors aucune
relation de conversion implicite entre eux.
Il n’existe donc pas de relation de conversion implicite (à la compilation) entre un set<Human> et un set<Animal>, pas plus qu’entre un set<Human*> et un set<Animal*>. Un ensemble
d’humains ne serait pas un ensemble d’animaux pour le compilateur C++ ! Cela heurte le sens commun, non ?
Eh bien ce n’est pas sûr ! Raisonnez par l’absurde. Imaginez qu’une telle conversion implicite
existe et écrivez ci-après un extrait de programme 2 montrant que l’on pourrait dans ce cas ajouter un
autre type d’animal (par exemple un singe, un crocodile, ou une bactérie) à un ensemble d’humains
et ceci en toute légalité « compilatoire ».
Juste si vous ne voulez pas me fournir de code si vous pouvez me dire en quoi cela peu poser des problèmes inhérents d'utiliser l'héritage d'ensemble?
Merci d'avance de votre réponse
Partager