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éritage de classe en c++


Sujet :

C++

  1. #1
    Membre à l'essai
    Femme Profil pro
    futur ingénieur
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : futur ingénieur
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Points : 10
    Points
    10
    Par défaut héritage de classe en c++
    Bonjour,
    j'ai une classe intitulée "produit_fini" qui hérite à la fois de la classe "stock" (afficher, modifier, supprimer) et de la classe "production" (saisir) .
    Mon problème est que je n'arrive pas à programmer cet héritage.
    j'ai essayé de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class produit_fini : public stock , public production
    { public:
    int code;
    produit_fini();
    ~produit_fini();
    void saisir();
    void afficher();
    void modifier();
    void supprimer();
     
    };
    Aidez-moi SVP

  2. #2
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Je pense que tu abuses de l'héritage et que tu devrais revoir ta conception.

    Si tu ne peux pas dire "un produit_fini est un stock, tu ne dois pas faire un héritage".

    Si tu as "un stock recense une liste de produit_fini", tu auras plutôt une liste de produit_fini en variable membre du stock.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Je suis d'accord avec Bretus et trouve suspect cet héritage.
    Quant au problème
    je n'arrive pas à programmer cet héritage
    je ne comprends pas ce que tu veux dire... enfin, ça veut rien dire.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Citation Envoyé par Boileau
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire viennent facilement.
    Il en va de même avec la programmation.
    De mon point de vue, si tu n'arrives pas à coder ton héritage, le problème est dans la question: soit c'est "l'héritage", soit c'est "coder".
    Dans le premier cas, repense ta solution, dans l'autre, révise tes connaissances du C++

    En l’occurrence, Bretus (et nous) te disons que c'est l'héritage le problème.
    J'en remets une couche.

    Si tu parles d'avoir, c'est un membre qu'il te faut, si tu parles d'être, c'est de l'héritage.
    C'est important, l'héritage signifie qu'on peut manipuler une référence vers le type de base (base&) désignant une variable du type héritant, sans perte d'information.

    Ton produit fini n'a rien a voir avec un stock, en effet.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Salut,

    Je rejoins totalement l'avis des autres au sujet de la manière dont tu as conçu ton programme. Vu d'ici, il semblerait bien qu'il y ait quelque chose majeure à revoir.
    Toutefois si pour une raison quelconque, tes choix étaient justifiés (un produit finit étant la combinaison d'un produit stocké et d'un mode de production ), pour qu'on puisse t'aider plus il faudrait nous en donner plus.

    1) On suppose tous que tu n'y arrives pas, c'est bien pour ça que tu es là
    2) Le problème est aussi complexe pour nous que pour toi. Si tu ne détaille pas ce que tu as déjà fait, on peut aller jusqu'à te demander "est-ce que tu sais ce qu'est l'héritage? un objet..? une variable....?" (oui, j'exagère les deux derniers). A moins de te refaire un cours sur le sujet, comment être sur de bien cibler la cause du problème?
    3) En pratique, tu parles d'héritage depuis deux classes de base mais ne fournit que la signature de la classe enfant... ça compile? ou pas? et les classes de bases? tu les as faites aussi? elles compilent? ou pas? erreur fournit par le compilateur? erreur de runtime? pas d'erreur, juste que ça ne fait pas ce que tu veux??
    4) Au pifomètre, les méthodes de ta classe enfant, sont elles des redéfinitions des méthodes des classes de base? ces dernières sont elles virtuelles?

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Ca pourrait être une erreur de nommage.

    un Stock s'affiche, se modifie et se supprime. Ca ressemble plus à un stockable.
    un production peut être saisi, ca ressemble à un constructeur.

    La structure que j'aurai choisi serait plutot:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    class produit {
        string nom;
        int prix;//en centimes.
    public:
        produit(string const& nom, int prix);
     
        string nom() const;
        int prix() const;//en centimes.
    }
     
    produit demander_produit();
    //voire même
    std::istream& operator>>(std::istream&, produit &);
     
    //pour l'affichage
    std::ostream& operator<<(std::ostream&, produit const&);
     
     
    //une classe extérieure: 
    class entrepot {
        collection<produit> produits; // une map? un vector?
     
    public:
        entrepot& operator<<(produit const& p) {produits.add(p); return *this;}
     
        //les itérateurs classiques
        const_iterator& begin() const;
        //...
     
        entrepot& remove(produit const& p);
    };
     
    //pour l'affichage
    std::ostream& operator<<(std::ostream&, entrepot const&);
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. conflit d'inclusions et Héritage de classe
    Par gedeon555 dans le forum C++
    Réponses: 7
    Dernier message: 01/10/2006, 19h48
  2. [POO] Problème héritage des classes PHP4
    Par zana74 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2006, 16h00
  3. Héritage de classes.
    Par Berzerk_ dans le forum C++
    Réponses: 48
    Dernier message: 13/08/2006, 23h48
  4. [POO] Héritage vs classe dans une classe
    Par robichou dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2006, 23h51
  5. [OO] Héritage - Mixins Classes
    Par djmalo dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 01/03/2005, 23h16

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