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 :

[POO] Un seul pointeur pour deux classes différentes


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 20
    Points : 22
    Points
    22
    Par défaut [POO] Un seul pointeur pour deux classes différentes
    Bonjour,

    Dans l'exemple suivant comment faire pour déclarer un pointeur c pouvant prendre la valeur a ou la valeur b :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    classA *a;
    classB *b;
     
    a = new classA(...);
    b = new classB(...);
    Schématiquement je souhaite réaliser ceci :

    D'avance, Merci
    Xav

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    Salut,

    première question à se poser est ce vraiment nécessaire ? est ce que la conception est correcte ?

    Ensuite si oui, alors il faut utiliser l'héritage. Tu créés une super-classe C dont les classes A et B vont hérités. Tu en profites pour faire remonter les variables et méthodes communes dans la classes C.

    Pour plus de détails sur le héritage. Regarde le chapitre suivant : http://bruce-eckel.developpez.com/li...on-objets#L1.5
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  3. #3
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Bonjour,

    Ce que tu veux faire, c'est une interface.

    Si le pointeur c est de type C*, il faut que A et B dérivent de C.
    C est une classe n'ayant que des fonctions publiques virtuelles pures.

    http://bruce-eckel.developpez.com/li...on-objets#L1.5
    Ici, Forme est l'interface de Cercle, de Carre et aussi de Triangle.

    Grilled… avec le même lien, en plus !
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 20
    Points : 22
    Points
    22
    Par défaut
    Merci pour vos réponses.
    A et B ne peuvent pas dériver C car les paramètres du constructeur de C ne conviennet pas à la fois à A et à B.
    Dans mon programme principal, en fonction des données d'entrée, je dois créer soit une instance de A, soit une instance de B. J'aurais souhaité avoir une seule instance c (attribuer initialement c=a ou c=b) afin d'éviter de faire le distingo entre a et b lors des différents traitements.

  5. #5
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Ton problème me fait penser au pattern stratégie... C'est clair !
    http://come-david.developpez.com/tut...page=Strategie

    Bonne continuation,

    Poukill

  6. #6
    Membre averti Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Points : 323
    Points
    323
    Par défaut
    A et B ne peuvent pas dériver C car les paramètres du constructeur de C ne conviennent pas à la fois à A et à B
    Il n'est pas impossible de donner des constructeurs différent a A et B, même si elles héritent de C. Comme ça tu peu faire construire ton objet par une fabrique(design pattern factory), et après tu n'as plus besoin de savoir si a la base c'était un A ou un B.

    (Sinon stratégie peu marcher aussi )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une seule déclaration pour deux fiches
    Par Général03 dans le forum C++Builder
    Réponses: 12
    Dernier message: 29/08/2007, 10h29
  2. Deux submits pour deux pages différentes
    Par ceaser dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 19/07/2007, 22h34
  3. Réponses: 6
    Dernier message: 24/05/2007, 13h40
  4. Réponses: 9
    Dernier message: 12/04/2007, 08h53
  5. Réponses: 3
    Dernier message: 24/07/2006, 16h11

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