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 :

Staticité et héritage


Sujet :

C++

  1. #1
    Membre éprouvé
    Lycéen
    Inscrit en
    Juillet 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2007
    Messages : 148
    Par défaut Staticité et héritage
    Salut à tous, je me pose des questions concernant les attributs statiques d'une classe :

    Lorsqu'on dérive une classe contenant un attribut statique, cet attribut est-il commun aux 2 classes?

    Ou chaque classe se garde un membre statique différent?


    Et sinon, comment fait-on pour avoir un attribut pointeur statique, qui pointe sur quelque chose qui n'existe pas à la compilation? Car j'ai essayé de le définir juste après avoir fait le "new..." et ça me met un conflit entre la déclaration dans le main.cpp, et celle dans la déclaration de classe.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 636
    Par défaut
    Salut,

    Un membre static est partagé par toutes les instance de la même classe... Cela signifie qu'il est partagé par instances des classes dérivées, si le membre n'est pas "prive", car sinon il n'est purement et simplement pas accessibles par les classes dérivées

    La définition d'un membre statique doit être effectuée dans exactement un fichier d'implémentation sous la forme d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    letype LaClasse::lemembre= lavaleur;
    où letype correspond au type du membre, LaClasse correspond au nom de la classe (avec les indicateur de portée éventuels), lemembre correspond au nom du membre à définir et lavaleur correspond à une valeur en accord avec le type du membre à déclarer
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre éprouvé
    Lycéen
    Inscrit en
    Juillet 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2007
    Messages : 148
    Par défaut
    Oui mais justement, si comme attribut statique j'ai un pointeur vers autre chose, je fais comment?

  4. #4
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    Ben ce dont à parler koala01, c'est pour le lancement de ton programme. La valeur qu'aura la variable static quand le programme va débuter. Rien ne t'empêche de modifier cette variable static dans ton programme...
    Fichier Exemple.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class CExemple
    {
        public:
            static CExemple* pPointeur;
    };
    Fichier Exemple.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "Exemple.h"
    CExemple* CExemple::pPointeur= NULL;      // Ca c'est la valeur qu'aura le pointeur au lancement du programme
    Dans une fonction appellée Test par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void ModifPointeur(const CExemple* pExemple)
    {
            CExemple::pPointeur= pExemple;
    }
    La fonction ModifPointeurpeut-être apellée n'importe où dans ton programme, sans même que tu ai encore instancier de class CExemple.
    Si ta class CExemple est dérivé (en CFille), la class CFille aura accès à pPointeur, car pPointeur est dans la partie privée de CExemple.
    Maintenant si j'avais mis le pointeur dans la partie protected, la fonction ModifPointeurn'aurai paseu accès, mais par contre le class CFille oui. Et pour finir si j'avais mis le pointeur en private, alors personne à part les objets de types CExemple n'aurai eu acces au pointeur (pas les classes filles, pas la fonction ModifPointeur)

  5. #5
    Membre éprouvé
    Lycéen
    Inscrit en
    Juillet 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2007
    Messages : 148
    Par défaut
    Ah ok merci

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

Discussions similaires

  1. [Postgresql]Héritage
    Par lheureuxaurelie dans le forum PostgreSQL
    Réponses: 13
    Dernier message: 02/10/2008, 09h18
  2. [Héritage] Vos commentaires....
    Par Fyna dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 03/05/2005, 22h10
  3. [XML Schemas]héritage multiple
    Par nicolas_jf dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 12h55
  4. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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