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 :

Fonctionnement du protected.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Par défaut Fonctionnement du protected.
    Bonjour,

    Je ne comprends pas très bien pourquoi une classe fille ne peut pas accéder à un membre protégé de sa classe mère.
    Un petit exemple serra certainement plus efficace qu'un long discourt :

    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
     
    class Mother
    {
       protected :
          Mother( long x ) : value( x ) {}
          long value;
    };
     
    class A : public Mother
    {
       public :
          A( long x ) : Mother( x ) {}
          A & operator +=( const Mother & m ){
             value += m.value;
             return *this;
          }
    };
    Avec ce code, le compilateur m'insulte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Erreur E2247 protected.cpp 14: 'Mother::value' n'est pas accessible dans la fonction A::operator +=(const Mother &)
    D'où ma question : Pourquoi ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    C'est normal, ta variable m n'est pas ta variable this donc tu te situes à l'extérieur de m donc tu n'as pas accès aux membres protégés de la classe mère.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Pour que ça marche, déclare dans Mother :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const long GetValue () const;
    Et dans ton opérateur += de la classe A:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    value+=m.GetValue();

  4. #4
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Une question :

    Pourquoi le paramêtre de ta fonction opérateur += est Mother&

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    A & operator +=( const Mother & m )
    est pas A& ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    A & operator +=( const A & m )
    Parsque la ça compile.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Par défaut
    C'est normal, ta variable m n'est pas ta variable this donc tu te situes à l'extérieur de m donc tu n'as pas accès aux membres protégés de la classe mère.
    Donc si je te comprend bien, le protected ne fonctionne que pour this. C'est bien ça ?
    Pourtant, comme le fait remarquer CGI, si on passe un type A en paramètre, ça fonctionne, alors que l'on est pas dans this non plus.

    Pour que ça marche,...
    Oui, c'est une des nombreuses solutions ( personnellement, j'ai préféré utiliser les friends). Merci de ta réponse, mais le but de cette discution est surtout de comprendre le pourquoi du comment.

    Pourquoi le paramêtre de ta fonction opérateur += est Mother&
    Par ce que j'aimerrai pouvoir faire des sommes de n'importe quel élément dérivé de Mother.

  6. #6
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 950
    Par défaut
    tu en eput acceder a cette donnée ci, il faut que tu crée un getValue() qui te renvoie la valeur, car value a un attibut protected, certe, ton objet peut modifier cette var, tant que c'est celle de l'objet en cours en d'autres mots : tu ne peut acceder a value ailleur que dnas l'objet qui le "porte"

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Par défaut
    OK, j'ai compris.
    Merci de vos réponses.

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

Discussions similaires

  1. [XL-2010] ActiveSheet.Protect VBA ne fonctionne plus sous XL2010
    Par lafafmentvotre dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 27/09/2011, 16h33
  2. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 21h49
  3. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 21h46
  4. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10
  5. [VBA-E] [Excel] Protection d'une plage de cellules
    Par fikou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/11/2002, 11h28

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