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 :

Heritage: referencer une classe abstraite dans une autre classe


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Heritage: referencer une classe abstraite dans une autre classe
    Bonjour,

    Ma question ne concerne pas exactement l'Heritage mais l'appel d'une classe abstraite pas une autre classe. Je m'explique par un exemple:
    -vous avez une classe abstraite A dont vous deriver deux classe A1 et A2
    -vous voulez construir une classe B qui reference un objet a qui peut etre de type A1 ou A2, le type de a sera connu dynamiquement.

    Comment on peut faire ca?
    Votre aide me sera tres precieuse, je vous en remercie d'avance

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Points : 43
    Points
    43
    Par défaut
    Bonjour
    essayez toujours de faire une recherche avant de poster un message.
    http://cpp.developpez.com/cours/cpp/?page=page_10#LX-O

  3. #3
    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
    Sympa ton pseudo !
    Effectivement, sujet largement traité (et récurrent). Il suffit de stocker l'instance sous forme de pointeur.

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    merci flighwheit pour le lien, j'ai fait une recherche avant de poster ma question, mais je me suis un peu perdue dans les sites.

    Poukil, je pense que le probleme est un peu plus complique comme la classe abstraite A ne declare pas forcement toutes les methodes dans A1 et A2
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    class A {
       public :
           A();
           virtual fA();
    }
     
    Class A1 : public A{
        ...
        fA();
        fA1();
     
    }
     
    class B {
    ...
    void f();
    A*a ;
    }
     
    B::f(){
     
       a.fA1() // Problem ici fA1 n'est pas visible a partir de a 
    }
    est ce qu'y a une methode pour que le code precedant marche

  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
    Pense à la balise CODE!
    Ce genre de problème se résoud avec un downcasting par exemple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static_cast<A1>(a).fA1() // Problème résolu
    Mais ce genre de problème peut faire penser à un problème de conception...

  6. #6
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Exactement c'est un probleme de conception pour moi
    Si vous avez des suggestionsur comment se servir de l'Oriente Objet de maniere efficace ce sera extremenet util pour moi.
    merci

  7. #7
    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
    Il me faudrait des heures pour tout t'expliquer (et je suis loin de tout savoir).
    Ce qu'il faut retenir :

    1. Ce n'est pas parce que tu utilises un langage orienté objet que tu programmes orienté objet.
    2. Ce n'est pas parce que tu utilises des classes que tu programmes orienté objet.


    Si tu veux apprendre, achète toi un livre. Il y a plein de livres présentés chez DVP.com. Les éditions Tête La Première par exemple font souvent des bouquins de qualité avec une super pédagogie.

    En ce qui concerne ton problème, peut-être qu'en nous exposant ton cahier des charges, on pourrait t'aider un peu plus !

  8. #8
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je sens pas non plus que je fais de l'orienter Objet enfin j'essaie mais j'ai pas encore le reflexe de faire ca et Je pensais effectivement achetter un bouquin sur les design patterns, on me l'a souvent conseille'.

    en attendant de tout lire et comprendre voici des elements de mon cahier de charge, peut etre que vos suggestion m'aideront.
    il est a note que je serai amener a ajouter d'autre elements dans le cahier de charge c'est pour ca que j'ai interet a avoir une architecture flexible et reutilisable des le debut.
    en gros, je veux faire une librairie de pricing.
    -je price des produits disons ( P1, P2, P3 ,...) si jamais dans 3 mois y a un autre produit qui sort je dois etre capable d'etendre la laibrairie pour contenir ce nouveau produit
    -Chaque produit peut etre evaluer en utilisant une "Methode d'evaluation" ou "Model". dison que pour le moment j'ai 3 model M1, M2, M3 chacun a ces parametres, et ces fonction, mais ces models ont des primitives en comun tel " donnerPrix(Produit) par exemple.

    un autre point est que je peux avoir des sous models M1.1, M1.2 qui font des hypotheses suplementaire au model de base M1.

    Je veux pas recrire tt le code a chaque fois que je decouvre qu'il ya un nouveau model qui sort ou si des parametre s'ajoutent.

    voila, j'espere que vous y voyer plus claire mnt.

  9. #9
    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
    Pour ça, je te conseille de jeter un coup d'œil au bouquin Design Pattern, de l'édition Tête la Première. Je l'ai lu récemment et il est très très bien... Tu auras une introduction à tous les principaux pattern avec des exemples d'application très clairs. Ça vaut vraiment le coup !

  10. #10
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci Poukill pour tous ces conseil, et merci a ce forum

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/11/2014, 14h46
  2. Réponses: 8
    Dernier message: 05/04/2011, 08h06
  3. Réponses: 7
    Dernier message: 03/12/2008, 15h18
  4. Réponses: 1
    Dernier message: 11/06/2008, 13h33
  5. Classe abstraite dans une base de données
    Par mctd02 dans le forum Schéma
    Réponses: 1
    Dernier message: 19/11/2007, 08h48

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