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 :

Acces aux variables PRIVATE


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Acces aux variables PRIVATE
    Bonjour,

    Après plusieurs recherches infructueuses je me suis décide à poser ma question ici.

    C'est une question toute simple pour la plus part d'entre-vous a mon avis ;-)

    Pourquoi le compilateur permet-il d’accéder a une variable membre privée alors que d’après moi il ne devrait pas ?
    (indiqué par "<--ici" dans le "test.cpp")

    Merci

    Mon Main:
    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
    #include <iostream>
    #include "test.h"
     
    using namespace std;
     
     
    int main()
    {
        test t1,t2;
     
        t2.setVar1(3);
     
        cout << "Affiche t1";
        t1.affiche();
     
        cout << "Affiche t2";
        t2.affiche();
        t2.methTest(t1);
     
        cout << "Affiche t1";
        t1.affiche();
     
        return 0;
    }
    Ma classe(h) :
    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
    #ifndef TEST
    #define TEST
     
    #include <iostream>
     
    using namespace std;
     
    class test
    {
        private:
            int _Var1;
     
        public:
            test();
     
            int getVar1();
            void setVar1(int v);
     
            void methTest(test &t);
            void affiche();
    };
     
    #endif
    Ma classe(cpp) :
    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
    #include "test.h"
     
    test::test()
    {
        _Var1 = 10;
    }
    int test::getVar1()
    {
        return _Var1;
    }
    void test::setVar1(int v)
    {
        _Var1 = v;
    }
    void test::methTest(test &t)
    {
        t._Var1 = 3; //<-----------------------------------------ici
        t.setVar1(3);
    }
    void test::affiche()
    {
        cout << endl << "_Var1 = " << _Var1 << endl;
    }

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Le C++ réalise une encapsulation au niveau de la classe et non au niveau de l'objet.

    Pour rendre ca moins obscure, il faut se dire que private va interdire à des objets d'un autre type accéder aux variables privées mais il ne peut rien interdire à un objet du même type.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre habitué Avatar de Xtrem_Voyageur
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2009
    Messages : 85
    Points : 154
    Points
    154
    Par défaut
    Toutes les fonctions que tu as définies dans ton .cpp sont membres de la classe, elles ont donc toutes accès à la représentation de ta classe test et donc ici à la variable privée.
    Si en revanche le membre 'methTest' avait été une simple fonction externe à ta classe test, oui il y aurait eu problème.

    Maintenant les remarques, tu n'es pas obligé de spécifier le private, par défaut tout est private dans une classe.
    Ensuite, j'ai l'impression que tu t'es mélangé entre les notions de private, d'accès et de modifications. Comme si dans ta tête, on pouvait consulter la variable privée mais ne pas la modifier.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Un grand merci pour vos réponses.

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

Discussions similaires

  1. [FLASH MX] Accès aux variables
    Par renofx1 dans le forum Flash
    Réponses: 4
    Dernier message: 21/12/2005, 15h30
  2. Acces aux variables d'une DLL
    Par abignon dans le forum MFC
    Réponses: 1
    Dernier message: 08/09/2005, 14h29
  3. [C#] Accès aux variables Session
    Par kalan dans le forum ASP.NET
    Réponses: 9
    Dernier message: 31/08/2005, 16h40
  4. [FLASH MX2004] [AS2] Accès aux variables d'une classe
    Par stailer dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 17/07/2005, 12h58
  5. [Language]Accès aux variables
    Par Adaemon dans le forum Langage
    Réponses: 12
    Dernier message: 27/04/2005, 14h17

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