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 :

Probleme avec les classes friends


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 27
    Par défaut Probleme avec les classes friends
    Bonjour,
    j'aurais besoin de votre aide pour éclairer ma compréhension de l'utilisation de telles classes.
    Imaginons que j'ai deux classes Chat et Bol_de_lait.

    On a Bol_de_lait amie de Chat donc la classe Chat peut accéder à toutes les données et fonctions membres de la classe Bol_de_lait.
    J'ai donc une fonction membre de Chat, Boire() qui décremente une variable 'lait_restant' de la classe Bol_de_lait.
    Jusqu'ici tout est clair pour moi.

    Maintenant je crée un objet Chat,minou, et deux objets Bol_de_lait,bol1 et bol2.
    J'appelle minou.Boire(). Comment je précise quel bol de lait est bu? Autrement dit, Boire() va décrementer la variable 'lait_restant' de quel objet ?

    Merci.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Eh bien, si lait_restant est une variable statique de la classe Bol_de_lait, il n'existe qu'une variable lait_restant commune à tous les bols.

    Si c'est juste une simple vairable d'instance, eh bien il faut que tu passes une référence (ou un pointeur) vers un bol à la méthode Boire()...

    PS: As-tu vraiment besoin de donner un accès complet à la classe Chat ?
    Exporter des accesseurs/modifieurs publics n'est-il pas suffisant?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Pas des accesseurs/mutateurs. Ici, c'est vraiment du mauvais design. De la même façon que faire de la classe bol de lait une amie de la classe chat. En termes de design, c'est exactement le même. Et il n'est pas bon.

    Je verrais plutôt un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct BolDeLait : noncopyable {
       bool resteDuLait() const;
       /// @pre (old_quantite = this->quantite ;) old_quantite > 0
       /// @post Gorgee.quantite + this->quantite == old_quantite
       Gorgee seFaireLapper() ;
    };
    Les données membres ? Peu importe. Un chat ne sait pas mesurer des volumes de lait -- c'est pas comme ces dromadaires mathématiciens.

    Côté chat, cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct Chat : noncopyable {
    private: 
        void boire(BolDeLait & bol) {
            if (bol.resteDuLait()) {
                Gorgee g = bol.seFaireLapper();
                ingurgiter(g);
            }
        }
       ...
    };
    Privée car a priori c'est le cente de décisions interne au chat qui commande de boire dans le bol perçu dans son environnement.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    On a Bol_de_lait amie de Chat donc la classe Chat peut accéder à toutes les données et fonctions membres de la classe Bol_de_lait.
    Faux. Si A est amie de B (ie dans B on déclare "friend class A;"), alors A a le droit d'accéder à des membres privés de B, pas le contraire.
    Le design n'était pas bon, se reporter à la solution de Luc Hermitte pour quelque chose de bon.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 27
    Par défaut
    L'amitié n'est pas réciproque...J'ai jamais dit le contraire...

Discussions similaires

  1. JSF/JPA probleme avec les classes embedded
    Par sorown dans le forum JSF
    Réponses: 0
    Dernier message: 02/04/2014, 13h15
  2. probleme Avec les classes Abstraites
    Par thibaultc dans le forum C++/CLI
    Réponses: 3
    Dernier message: 02/12/2013, 10h58
  3. probleme avec les class
    Par naifanshi dans le forum C++
    Réponses: 11
    Dernier message: 26/05/2008, 09h50
  4. Probleme avec les Classes
    Par archipel dans le forum Flash
    Réponses: 7
    Dernier message: 16/05/2007, 14h57
  5. [POO] Problème avec les classes
    Par peypey dans le forum Langage
    Réponses: 8
    Dernier message: 03/05/2006, 15h05

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