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 :

un attribut dont la valeur peut etre changée par les différents méthodes d'une classe


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut un attribut dont la valeur peut etre changée par les différents méthodes d'une classe
    Salut,
    Comment déclarer un attribut dans une classe pour que sa valeur soit modifiable par toutes les méthodes d'une classe et il se réinitialise pour les autres instances de cette classe ?
    J'ai essayé de le déclarer static, mais le problème est que sa valeur devient partagée par toutes les instances de la classe ce qui n'est pas ce qui est demandé.

    Merci pour votre aide.

  2. #2
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Je ne comprends pas très bien ce que tu veux faire.

    Si ton membre n'est pas const, n'importe quelle méthode de ta classe peut le modifier.

    Si ton membre est static, il n'existe qu'une seule fois, indépendamment du nombre d'instances de ta classe.

    Si tu as besoin de réinitialiser un membre d'autres instances de ta classes (ce que je comprends), je pense que tu as un problème de conception. Peux-tu détailler un peu plus ce que tu cherches à faire, et pourquoi ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 193
    Points
    193
    Par défaut
    Si tu déclares cet attribut en "private", il sera logiquement modifiable par toutes les méthodes de ta classe (sauf en cas d'héritage). Après, libre à toi de l'initialiser dans le constructeur, ainsi, a chaque nouvelle classe, tu à une variable interdépendante au niveau de la classe elle même, mais générale au niveau des méthodes de cette même classe.

    Je suis pas certain de m'être fait compris ... ! Si ca va pas, reposte que je m'explique plus clairement.

    Cordialement
    PKO

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut, et bienvenue sur le forum.

    Il y a deux cas à envisager:

    Le premier, qui est aussi le plus simple, est le cas où seules les méthodes non constantes peuvent modifier l'attribut.

    N'oublie pas que si les méthodes constantes peuvent s'appliquer sur un objet qui n'est pas déclaré constant, il s'agit par contre du seul genre de méthode accecptées lorsque l'on travaille sur un objet constant...

    Ainsi, si tu a une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MaClass
    {
        public:
            void MaFonctionNonConstante();
            void MaFonctionConstante() const;
    };
    tu peux appeler les deux fonction sur un objet déclaré sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaClass obj;
    obj.MaFonctionConstante(); // OK
    obj.MaFonctionNonConstante(); // OK
    mais tu ne peux utiliser que MaFonctionConstante si cela se trouve dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void foo(MaClass const & ref)
    {
        ref.MaFonctionConstante() //OK
        /*par contre, l'appel à ref.MaFonctionNonConstante() est refusé ici */
    }
    Dans cet exemple, tu peux sans aucun problème modifier la valeur d'un attribut dans MaFonctionNonConstante, mais tu ne peux pas le faire (parce qu'elle s'engage à ne pas modifier l'objet) dans MaFonctionConstante.

    Il suffit alors de déclarer ton attribut de manière tout à fait classique.

    Si, par contre, tu souhaite que même les méthodes constantes puissent modifier un attribut, parce qu'il s'agit par exemple d'un "cache" qui doit pouvoir être réinitialisé dans une fonction constante, il s'agit de déclarer l'attribut avec le spécificateur de classe de stockage "mutable".
    La classe MaClass pourrait donc contenir, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class MaClass
    {
        public:
            void MaFonctionNonConstante();
            void MaFonctionConstante() const;
        private:
            mutable std::string m_cache;        
    };
    où cache pourrait très bien être modifié dans MaFonctionConstante()

    Par la suite, il faut prendre quelques instants de réflexion afin de savoir l'accessibilité que tu dois accorder à cet attribut:
    1. Privée si seules les fonctions de la classe d'origines sont susceptibles de modfiier cet attribut
    2. Protégée si les fonctions des classes dérivées sont susceptibles de le modifier
    3. (publique si tu dois pouvoir modifier cet attribut de n'importe où, bien que ce ne soit clairement pas recommendé)

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut un attribut dont la valeur peut etre changée par les différents méthodes d'une classe
    Salut
    Merci beaucoup pour toutes vos réponses , grace à vous j'ai résolu mon problème:en fait il faut déclarer l'attribut private pour qu'il soit changé par toutes les methodes de la classe.
    Merci.

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

Discussions similaires

  1. [XL-2003] Alimentation d'une listview par les différentes valeurs d'une colonne
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/12/2012, 09h52
  2. Comment ne pas etre bloqué par les dépendances ?
    Par mucky dans le forum Mandriva / Mageia
    Réponses: 4
    Dernier message: 20/12/2009, 13h37
  3. Quels sont les différents états qu'une cellule excel peut avoir ?
    Par planete.gonz dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 07/11/2008, 17h15
  4. [XSLT]Sort sur un attribut dont la valeur est en param
    Par Trin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 07/11/2005, 16h16
  5. prob requete: compter les attributs dont la valeur=1
    Par klik dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/07/2005, 09h56

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