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 :

Héritage et accès aux données


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 6
    Par défaut Héritage et accès aux données
    Bonjour,

    J'aurai une question par rapport à l'héritage de classe.
    J'ai une classe mère Solution dans laquelle j'ai des données "protected" et une classe fille SolPVL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Solution
    {
    protected:
      int nbLig;
      ...
    }
    class SolPVL : public Solution
    {
       ...
    }
    Si j'ai bien compris, mes données protected de Solution devraient alors être aussi protected dans SolPVL, non ?

    Pourtant, si j'appelle nbLig depuis une fonction de SolPVL, j'obtiens l'erreur suivante à la compilation :
    /home/spetit/logiciel/include/solution.hpp:44: error: `int Solution::nbLig' is protected
    solPVL.cpp:189: error: within this context
    Est ce que ça peut venir du compilateur (g++, j'ai essayé avec les versions 3.3.6 et 4.0.1).
    Y a t'il une autre solution que de mettre toutes les données en public (j'ai essayé et pas d'erreur dans ce cas).

    Merci.
    Stéphanie

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    C'est bizarre... chez moi je n'ai pas eu ce type de problème... (avec GCC comme compilateur)
    Est-ce que tu peux nous donner un code minimal qui reproduit cette erreur ?

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Dans une classe fille, tu n'as pas accès aux données protected d'un autre objet.

    Ce que tu peux faire, c'est un pseudo-accesseur protected static (inline pour optimiser) dans la classe mère, qui te permette d'accéder aux données de l'autre objet.
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Solution
    {
    protected:
       int nbLig;
       static inline int GetNbLig(Solution const &sol)
          { return sol.nbLig; }
    }
    class SolPVL : public Solution
    {
       void UneFonction(Solution & sol)
       {
          int nLig = GetNbLig(sol);
       }
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    ????

    Les membres protected sont vu comme public en interne dans la classe, et private à l'extérieur, non ???
    Donc une classe fille devrait y avoir accès.

  5. #5
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par poukill
    Donc une classe fille devrait y avoir accès.
    Oui, oui, l'instance d'une classe fille y a accès.
    Mais une instance d'une classe fille n'a pas accès aux membres protected d'une autre instance de la même classe fille. Je crois que c'est ce que voulais dire Médinoc.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    J'ignore si c'est dans la norme, mais c'est en tout cas ce que j'ai constaté.

    Il semblerait qu'on n'ait accès aux variables protected/private d'un objet extérieur que dans la même classe, et non pas dans les classes parentes/dérivées.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par Eusebe
    Oui, oui, l'instance d'une classe fille y a accès.
    Mais une instance d'une classe fille n'a pas accès aux membres protected d'une autre instance de la même classe fille. Je crois que c'est ce que voulais dire Médinoc.
    Je ne crois pas.

    D'ailleurs les droits d'accès aux membres (privés/protégés/publics) n'ont rien à voir avec les instances: toutes les instances d'une classe donnée se comportent rigoureusement de la même façon !

    C'est au niveau des déclarations des différentes classes que ça se joue.

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

Discussions similaires

  1. Héritage, Accès aux données ...
    Par Joad dans le forum C++
    Réponses: 14
    Dernier message: 28/04/2006, 11h16
  2. [SGBD]Optimiser le temps d'accès aux données (schéma BD)
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 08/10/2004, 18h33
  3. [débutant] avoir accès aux données de la base BCDI 3
    Par Valichou dans le forum Bases de données
    Réponses: 7
    Dernier message: 06/05/2004, 13h13
  4. accès aux donnée d'un DBGRID
    Par relax_06 dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/03/2004, 23h06
  5. [TDataModule] Intérêt de séparer les accès aux données?
    Par Cornell dans le forum Bases de données
    Réponses: 5
    Dernier message: 05/09/2003, 16h42

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