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 :

reccupérer un membre privé d'une classe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Par défaut reccupérer un membre privé d'une classe
    Bjrs;

    parmi les membres privées de ma classe, j'ai une liste. voila la partie code:

    private:
    typedef typename std::list<int _Container;

    je veux savoir comment recuperer ma liste pour l'utiliser dans les classes derivants de cette classe.
    merci pr votres reponses

  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 : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Tu la met en protected.
    Les classes dérivant de la classe qui contient la liste aurant acces a _Container mais pas les autres classes.
    De cette facon , on respecte l'encapsulation.

    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
     
     
    class A
    {
    protected : 
    int m_v;
     
    public:
    A():m_v(0){}
     
    };
    class B : public A
    { 
     
    public:
    B():m_v(10){} 
     
    int foo()
    {
    m_v++;//OK , car On est dans une classe dérivé de A et A::m_v est protected.
    cout<<m_v;
    } 
     
    };
     
    int main (void)
    {
    A a;
    B b;
    b.foo(); 
    cout<<a.m_v; // passe pas. A::m_v n'est pas publique
    }
    Edit : commncer un nom de variable par _ c'est pas recomandé.
    Utilise plutôt m_
    "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 éclairé
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Par défaut
    en faite, ça ma été demandé de garder les membres en privée et de faire deux fonctions getters et setters pour recuperer la valeur et l'initialiser. ce qui me pose le pb que ça soit une liste et je vois pas ce que je dois retourer (un pointeur sur la liste (int*), ou toute la liste)
    merci

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    un pointeur sur la liste (int*), ou toute la liste
    Un pointeur sur la liste ce n'est pas int*, c'est std::list<int>*. Et dans ce cas on préférera renvoyer une référence (constante si en lecture seule) : std::list<int>&.

  5. #5
    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 : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    C'est idiot de passer par des accesseurs/mutateurs pour les classes dérivé.
    "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)

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par Davidbrcz
    C'est idiot de passer par des accesseurs/mutateurs pour les classes dérivé.
    Non. Ce n'est pas parce que seul un nombre restreint de classes y accéderont qu'ils devrait y avoir moins de contrôle. Par exemple tu peux vouloir que tes dérivées n'accèdent qu'en lecture à ta variable, ou encore que la valeur retournée ne soit pas directement membre de la classe mère.

    Par contre ce qui est idiot (parfois) c'est de fournir des accesseurs en lecture / écriture plutôt que la variable directement.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/01/2015, 02h30
  2. Modifier un membre privé d'une classe
    Par Haythem17 dans le forum Débuter
    Réponses: 3
    Dernier message: 22/03/2014, 22h29
  3. Réponses: 2
    Dernier message: 18/04/2012, 17h47
  4. Réponses: 15
    Dernier message: 03/12/2008, 11h47
  5. membre statique dans une classe
    Par motrin dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 30/12/2005, 15h15

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