IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Héritage et template C++


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Echyzen
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 123
    Par défaut Héritage et template C++
    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

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    Hypthèse:
    si Humain dérive de Animal,
    alors set<Humain> dérive de set<Animal>.

    on est OK ?

    Alors soit une méthode AddSinge(set<Animal>& animaux) qui ajoute un singe à la liste des animaux.
    Si set<Humain> dérive de set<Animal> alors on peut passer un set<Humain> à AddSinge et donc on devrait être capable de lui ajouter un singe à la liste en entré.
    Et là, il y a paradoxe car on a un singe dans une liste d'humain.

    C'est le genre de problème que l'on regroupe sous les termes covariance et contra-variance en langage informatique.

  3. #3
    Membre confirmé Avatar de Echyzen
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 123
    Par défaut
    Un big big merci limpide comme l'eau de roche

Discussions similaires

  1. "Héritage" ou "Template de table"
    Par mr_yvele dans le forum PowerAMC
    Réponses: 1
    Dernier message: 13/09/2007, 17h45
  2. Héritage classe template->classe template
    Par zabibof dans le forum Langage
    Réponses: 5
    Dernier message: 11/08/2007, 11h05
  3. Réponses: 16
    Dernier message: 17/03/2007, 17h31
  4. Héritage et Templates
    Par rulianf dans le forum C++
    Réponses: 5
    Dernier message: 26/10/2005, 17h09
  5. héritage et template STL
    Par jevito dans le forum Langage
    Réponses: 5
    Dernier message: 21/09/2005, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo