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 :

Encapsulation bizzare ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut Encapsulation bizzare ?
    Bonjour,

    J'ai déclaré une classe B à l'intérieur d'une classe A pour que la classe B ne puisse être instanciée que par la classe A.
    Apparement ça fonctionne mais il se passe quelque chose de bizzare au niveau de l'encapsulation.
    Voici en gros comment ma classe est construite:

    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
    36
     
    class A
    {
        class B
        {
          A *pA;
          int var;
          ...
          public:
          B(..){...}
          void getA(A *a){pA = a;} 
          void func();
        };
     
       int var;
       B *pB;
       ...
        public:
         A(...)
          {
             ...
             pB = new B(...);
             pB->getA(this);
           }
         void func();
    };
     
    void A::func()
    {
      pB->var = 10;  //erreur var est privé
    }
     
    void A::B::func()
    {
       pA->var = 10; //pas d'erreur ????
    }
    je n'arrive pas à comprendre pourquoi la fonction membre de B a accés à la variable privée de A.
    Est ce normal, et comment faire pour que la variable de A reste privé et donc inaccessible ?

    Merci

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Où est-ce que B a accès à une variable privée de A dans ton code ?

  3. #3
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void A::B::func()
    {
       pA->var = 10; //pas d'erreur ????
    }
    il modifie la variable var (privée) de A via le pointeur pA.

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

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Les classes internes en C++ ont accès à tous les membres de la classe qui l'encapsulent, quelque soit leur portée.

Discussions similaires

  1. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  2. [DLL] Exports bizzares
    Par Gogoye dans le forum C++
    Réponses: 6
    Dernier message: 03/03/2005, 14h19
  3. Question facile, erreur bizzare lors d'un Left, Top
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2004, 12h56
  4. Encapsulation graphique d'un outil en ligne de commande
    Par Leishmaniose dans le forum Composants VCL
    Réponses: 3
    Dernier message: 12/11/2003, 11h59
  5. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58

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