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 :

Casse tête sur du friend avec de l'héritage


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 140
    Points
    140
    Par défaut Casse tête sur du friend avec de l'héritage
    Bonjour,

    Je rencontre un véritable casse tête sur lequel j'aurais besoin de vos lumières.

    Voici le code 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    class A1 ;
    class A2 ;
    class A3 ;
     
    //classe mère
    class A {
    private :
      double valeur ;
    }
     
    //les trois classes filles
    class A1 : public A {
      public :
        A1(double x = 0):valeur(x) ;
        friend A3 operator/(A1 x , A2 y);
     
    }
     
    class A2 : public A {
      public :
        A2(double x = 0):valeur(x) ;
        friend A3 operator/(A1 x , A2 y);
     
    }
     
    class A3 : public A {
      public :
        A3(double x = 0):valeur(x) ;
     
    }
     
    //la division qu'on effectue
    A3 operator/(A1 x , A2 y){
       return A3(x.valeur / y.valeur);
    }
    Lors de la compilation d'un tel programme je rencontre l'erreur, " Vous ne pouvez pas accèder à A::valeur. Ce champs est privé."

    Avant de vous demander de l'aide, je suis allé voir la FAQ et je suis tombé sur :

    "Je ne fais pas forcément confiance aux enfants de mes amis
    Les privilèges de l'amitié ne sont pas hérités. Les classes dérivées d'une classe amie ne sont pas forcément des amis. Si la classe Fred déclare que la classe Base est une amie, les classes dérivées de Base n'ont pas à avoir automatiquement des droits d'accès particuliers aux objets de type Fred.

    Je ne fais pas forcément confiance aux amis de mes amis
    Les privilèges de l'amitié ne sont pas transitifs. Un ami d'un ami n'est pas forcément un ami. Si la classe Fred déclare que la classe Wilma est une amie, et que la classe Wilma déclare que Betty est une amie, la classe Betty n'a pas à avoir automatiquement des droits d'accès particuliers aux objets de type Fred.

    L'amitié n'est pas réciproque
    Vous ne me faites pas confiance simplement parce que je déclare que vous être mon ami. Les privilèges de l'amitié ne sont pas réciproques. Si la classe Fred déclare que la classe Wilma est une amie, les objets de type Wilma n'ont pas à avoir automatiquement des droits d'accès particuliers aux objets de type Wilma. "

    Seulement mon cas ne semble être aucun de ses trois mais j'ai l'impression, peut-être que je me trompe, que je ne peux acceder avec l'operateur / au champs valeur car par héritage, je vais aller le chercher dans l'objet A.

    J'aimerais comprendre comment résoudre ce problème.

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Points : 444
    Points
    444
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class A {
    
    private:
    
        double valeur; //Champ privé donc inaccessible aux classes dérivées
    };
    Remplace le private par un protected et tout devrait rentré dans l'ordre.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Jui,

    De plus, tu auras un autre problème, puisque tu déclares
    et que tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        A1(double x = 0):valeur(x) ;
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 140
    Points
    140
    Par défaut
    droggo : je comprends pas l'erreur que tu essayes de m'indiquer.
    Peux tu m'expliquer ?

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Huo,
    Citation Envoyé par Drannor Voir le message
    droggo : je comprends pas l'erreur que tu essayes de m'indiquer.
    Peux tu m'expliquer ?
    Au temps pour moi, j'ai lu trop vite, et confondu
    avec la déclaration d'une fonction (et pourtant, l'absence da parenthèses évite toute ambiguïté).

    Shame on me.
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. [Vxi3] Casse-tête sur compteurs
    Par gillou13 dans le forum Designer
    Réponses: 8
    Dernier message: 15/04/2011, 15h21
  2. fonction casse-tête sur une date
    Par clavier12AZQSWX dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/06/2009, 11h36
  3. Requête casse tête sur anniversaire
    Par fardon57 dans le forum SQL
    Réponses: 3
    Dernier message: 14/01/2009, 16h53
  4. casse-tête sur date/calendrier
    Par SheikYerbouti dans le forum SQL
    Réponses: 21
    Dernier message: 23/08/2007, 17h56
  5. casse-tête sur les adresses (classe C et A)
    Par HuZimA dans le forum Protocoles
    Réponses: 7
    Dernier message: 27/07/2006, 13h05

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