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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
class Animal { ... };
class Human : public Animal { ... };
(On ne s’intéresse pas ici aux détails internes de ces classes). Et on a aussi une conversion implicite à
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 = new Human();
Cependant, pour le compilateur deux instances d’une classe template définissent des types différents
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