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

 C++ Discussion :

Héritages multiples : Connaitre la classe parente


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 51
    Par défaut Héritages multiples : Connaitre la classe parente
    Bonjour,

    J'ai un peu cherché sur le net une réponse à ma question. Je n'ai rien trouvé de précis donc je m'adresse à vous. Si par mégarde je suis passé à coté de quelque chose, merci de me rediriger :-).

    Mon problème :

    J'ai une classe virtuelle pure nommée Voiture et plusieurs classes (VoitureRouge, VoitureVerte, ...) qui héritent de celle ci. Je ne peux pas toucher au code de ces classes-ci !
    J'ai également une autre classe virtuelle VoitureDeCourse pure qui hérite de la classe Voiture et plusieurs classes (VoitureDeCourseBleue, VoitureDeCourseNoire, ...) qui héritent de VoitureDeCourse. Je peux modifier ces classes ci.

    Dans mon programme, je reçois aléatoirement des objets VoitureRouge, VoitureDeCourseNoire, etc.

    Y a-t-il un moyen simple de savoir si l'objet que je reçois est une Voiture ou si c'est une VoitureDeCourse ?


    Merci d'avance pour vos réponses,

    Bonne journée

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Bonjour,

    Oui on peut (dynamic_cast/typeid/sfinae), mais pourquoi as-tu ce besoin ?

    Je vois deux erreur de conception :
    -> Trop de classes filles inutiles, pourquoi utiliser l'héritage pour gérer les couleurs des voitures ? Les comportements d'une voiture rouge et d'une voiture noir sont si différent que ca ? Une implémentation des couleurs via l'héritage est aussi très statique alors qu'il est tout aussi simple d'en faire un point de variation totalement réglable au runtime (*) (par exemple : ajouter une couleurs possible).
    -> Si tu as besoin de déterminer si c'est une simple Voiture ou une VoitureDeCourse, alors ce que le comportement varie entre les deux, l'héritage publique associé au polymorphisme est la première solution a envisager si tu as ce besoin (**).

    (*) Une donnéer membre de type Color initialisé à la construction, à toi de choisir comment l'implémenter (RVB ou autre)
    (**) Si tu as le besoin de permettre l'ajout de fonctions avec des comportements très différents entre les deux classe fille (ie qui ne peuvent être exprimé en terme de services de la classe de base) alors le pattern visiteur est tout addresé (et dans ce cas tu pourras avoir un dynamic_cast en interne).

Discussions similaires

  1. Système de classe, avec héritage multiple dynamique
    Par kimjoa dans le forum Contribuez
    Réponses: 0
    Dernier message: 09/01/2010, 18h07
  2. Réponses: 6
    Dernier message: 17/07/2009, 20h27
  3. Comment hériter de deux classes ? (que signifie héritage multiple ?)
    Par adil_vpb dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 23/10/2007, 19h27
  4. Réponses: 2
    Dernier message: 01/12/2006, 15h20
  5. [POO]héritage du constructeur de la classe parente
    Par new_wave dans le forum Langage
    Réponses: 7
    Dernier message: 10/03/2006, 14h25

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