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 :

Attributs static d'une classe


Sujet :

C++

  1. #1
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut Attributs static d'une classe
    Bonsoir à tous !
    Je travaille en ce moment avec des attributs static dans les classes. Si j'ai bien compris la FAQ, pour affecter une valeur à un attribut static d'une classe il faut procéder de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    type MaClasse::MonAttribut = valeur_meme_type;
    Je voulais affecter la valeur d'un attribut d'une classe dans le constructeur d'une autre classe. Et la c'est le drame...
    Le compilateur m'envoit ***.
    Cela ne compile et fonctionne que lorsque l'affection d'une valeur se fait en dehors d'un bloc de code. Cela me gène assez...
    Mon attribut static est un pointeur vers une autre classe.
    Dans le code de mon contructeur je faisais donc qqchose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    type* MaClasse::MonAttribut = &(this->Attribut);
    Le but était bien évidemment que maclasse est accés à la classe instancié (this).
    Mais bon ça ne compile pas...
    Je préviens, je ne suis pas un spécialiste du C++, mon domaine de prédilection étant le C !
    Peut etre est ce un problême de conception également et que je ne devrais pas rencontrer ce genre de besoins.
    merci pour vos conseils

  2. #2
    Membre actif
    Avatar de mathk
    Inscrit en
    Décembre 2003
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 211
    Points : 233
    Points
    233
    Par défaut
    atten j l'impression que tu mélange lasse et objet
    Je voulais affecter la valeur d'un attribut d'une classe dans le constructeur d'une autre classe.
    :

  3. #3
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Désolés je n'ai peut etre pas employé les bon termes. Mais concretement je voulais attribuer la valeur d'un attribut static dans le code du constructeur d'une autre classe.

  4. #4
    Membre actif
    Avatar de mathk
    Inscrit en
    Décembre 2003
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 211
    Points : 233
    Points
    233
    Par défaut
    oki

    eu moi je ferai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse::MonAttribut = (this->Attribut);

  5. #5
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    C'est ce que je pensais également mais ça ne passe pas.
    Le fait que l'attribut static soit en protected n'est pas genant au moins ?

  6. #6
    Membre actif
    Avatar de mathk
    Inscrit en
    Décembre 2003
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 211
    Points : 233
    Points
    233
    Par défaut
    si bien sur que ca géne il faut le metre public ou alors tu déclare un friendly machin...

  7. #7
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Je l'ai passé en public mais ça ne change rien.

    http://c.developpez.com/faq/cpp/?pag..._static_erreur

    Dans cet exemple de la FAQ, l'attribut est en private.

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Tu sais que l'application de static aux membres d'une classe signifie commun à toutes les instances de la classe, et donc complètement indépendant de toute instance particulière ? (C'est la même chose dans les langages dérivés comme le Java)

    Que cherches-tu à faire exactement ?

  9. #9
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    C'est exactement ce que je cherche à faire justement ! C'est pour cela que l'emploi d'un attribut static m'a semblé le mieux approprié.

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Alors, cela veut dire que tu l'initialiseras lors de sa définition (!=déclaration) dans une et une seul unité de traduction. Cela se passe hors de toutes fonction. Par défaut, il ne peut donc exister de donnée calculée à y affecter.

    Ensuite Quelque part, lors de l'initialisation de ton programme, tu y affecteras une donnée issue d'un objet particulier. Typiquement depuis une fonction membre de cet objet.

    Ton étrange utilisation (j'entends: les lignes de code que tu as montrées) me fait toujours me poser la question de ce que tu cherches véritablement à accomplir.

  11. #11
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    J'ai un ensemble d'organismes (COrganisme) qui se déplacement dans un espace (CEspace).
    Ma classe CProcess est composé de cet ensemble de COrganisme(vecteur) et d'un CEspace.
    Les COrganisme ont besoins de connaitre l'espace dans lequel ils se déplacent. D'ou la nécéssité d'avoir un pointeur vers cet espace dans ma classe COrganisme définit en static vu qu'il sagit du meme espace pour tous
    C'est pour cela que j'avais pensé à donner la valeur de cet attribut lors de la construction de CProcess.

  12. #12
    Membre actif
    Avatar de mathk
    Inscrit en
    Décembre 2003
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 211
    Points : 233
    Points
    233
    Par défaut
    quand tu cré tes COrganisme tu demande en parametre l'objet <CEspace> associer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ... COrganisme ::COrganisme (CEspace e)
    ...
    puis tu stocke cette variable dans un attribut de t'on objet

  13. #13
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Oui je faisais ça au début. Mais finalement ils avaient tous la même valeur c est pour ça que je suis passé en static qui me semblait une méthode plus propre.

  14. #14
    Membre actif
    Avatar de mathk
    Inscrit en
    Décembre 2003
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 211
    Points : 233
    Points
    233
    Par défaut
    bien pas vraiment car static ca ressemble plus aux variables globales dans le temps des dinosors(lol).

  15. #15
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Ce n'est pas forcément plus propre car tu te retrouveras coincé le jour où tu voudras faire des ilôts d'organismes.
    La variable globale (singletonnée ou statique) est effectivement une possibilité, mais pas toujours la meilleure.

  16. #16
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Ok merci, je vais donc revenir au systeme ou je passais l'adresse de CEspace au constructeur de COrganisme.

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

Discussions similaires

  1. Attribut static d'une classe et var_dump / print_r
    Par Fladnag dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 3
    Dernier message: 16/01/2009, 11h54
  2. variable Static dans une classe
    Par cubitus91 dans le forum Delphi
    Réponses: 3
    Dernier message: 29/11/2006, 00h07
  3. attribut private d'une classe
    Par poukill dans le forum C++
    Réponses: 7
    Dernier message: 24/07/2006, 11h50
  4. fonction static dans une class
    Par Stany dans le forum C++
    Réponses: 3
    Dernier message: 16/06/2006, 14h43
  5. attribut partagé d'une classe
    Par tanjonaravelson dans le forum Général Python
    Réponses: 3
    Dernier message: 27/09/2005, 16h26

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