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 :

Variables globales dans une classe


Sujet :

C++

  1. #1
    Membre �clair� Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par d�faut Variables globales dans une classe
    Bonjour,

    Et elle n'est pas banal c'est question :-), elle est ridicule mais l� j'ai gros trou de m�moire.

    Actuellement j'ai pas mal de constantes dans mes classes. Cependant elles sont globales et non pas uniquement li�es � la classe. Mais en faisant les define dans la classe.
    Comment puis-je utiliser des constantes pour quels ne soit visible que par la classe ou en faisant CClass::Constante ?

    Merci d'avance et encore d�sol� pour cette question

    Bye


    [Titre modifi� par Loulou24, merci d'utiliser des titres explicites]

  2. #2
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par d�faut
    dans le header :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    class maths
    {
       static const double pi;
    };
    Dans l'implementation
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    const double maths::pi=3.14159; // oui c'est un peu court.

  3. #3
    R�dacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par d�faut
    salut

    voir post pour constantes globales dans une classe ou un namespace

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    74
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 74
    Par d�faut
    petite precision d'ecriture par convention les constantes sont ecrites entierement en majuscules juste un detail mais respecter par beaucoup de developpeurs par soucis de lisibilit�

  5. #5
    R�dacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par d�faut
    Citation Envoy� par star_light
    petite precision d'ecriture par convention les constantes sont ecrites entierement en majuscules juste un detail mais respecter par beaucoup de developpeurs par soucis de lisibilit�
    pas toujours, car on peut les confondre avec les macros.
    en particulier, si les constantes sont regroup�es dans une classe ou un namespace Constantes (par exemple) il n'y aura pas d'ambiguit� avec les variables donc on peut les mettre en minuscules. l� o� il peut y avoir ambiguit� et ou les majuscules ou une autre convention s'impose c'est dans le cas de l'emploi de "extern". dans ce cas la convention employ�e est le seul moyen de diff�rencier tout de suite les constantes des variables (surtout quand celui qui lit le code n'est pas celui qui l'a �crit).


  6. #6
    R�dacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par d�faut
    Citation Envoy� par Gandalf
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    const double maths::pi=3.14159; // oui c'est un peu court.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    const double maths::pi=4*atan(1.0); // là c'est moins court
    // const double maths::pi=2*acos(1.0);
    // ...

  7. #7
    Membre exp�riment�
    Profil pro
    Enculeur de mouches
    Inscrit en
    Septembre 2003
    Messages
    133
    D�tails du profil
    Informations personnelles :
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activit� : Enculeur de mouches

    Informations forums :
    Inscription : Septembre 2003
    Messages : 133
    Par d�faut
    Bien d'accord avec toi bigboomshakala, y'a que les macros que je met enti�rement en majuscule, mais bon pourquoi pas ? C'est pas interdit...

    D'ailleurs en parlant de macros, y'en a pas une qui s'appelle "M_PI" ?

  8. #8
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    J'ai tendance � mettre en majuscules les constantes connues � la compilation, pour les diff�rentier des autres constantes, car ce sont des b�tes diff�rentes (et �a facilite le portage de #define vers const...).
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  9. #9
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    La solution classique fournie par Gandalf est un grand classique, elle marche bien et � le m�rite de rattacher les constantes � une ou plusieur classes, ce qui �vite de trimballer des donn�es 'orphelines'.

    Je suis pour le moins sceptique quand � la proposition de bigboomshakala de d�finir les constantes dans un namespace. Cette m�thode ne permet pas de partager une m�me donn�e entre plusieurs unit� de compilation.
    En terme d'�dition de lien, un namespace n'a aucune existance. Cela revient � d�finir des variables globale. Or le seul moyen de partager une variable globale, c'est de pr�ciser au compilateur que le symbole est externe � l'unit� de compilation.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    extern const int maConstante;
    La m�thode d�crite d�fini les constante dans un ficher d'ent�te mais ne les d�clare pas dans une unit� de compilation sp�cifque. Par cons�quent, toute les constantes seront red�finies dans chaque unit� de compilation incluant cet ent�te.
    En gros, et pour faire clair, si on d�fini de cette mani�re une constante PI, chaque fichier source poss�dera sa variable globale PI.
    A part la perte de m�moire occasionn�e, le reste est transparent puisque toutes ces variables sont initialis�es de la m�me fa�con. Ce n'est n�anmoins pas une solution recevable.

    Une autre solution couramment employ�e pour les constantes enti�res est de les d�finir par une �num�ration annonyme. Cette solution � le m�rite de supprimer toute �dition de lien, puisque le compilateur remplace directement la constante par sa valeur (cf. exmple ci-dessous).
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    enum {VERSION = 2}
     
    struct Cube
    {
      enum {NB_FACE = 6}:
    };
     
    int main()
    {
      cout << VERSION;
      cout << Cube::NB_FACE;
    }

  10. #10
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut
    remarque : c'est ce que fait Visual pour la d�finition des ID de ressource pour les classes de dialogue.
    Par contre, j'ai du mal � saisir la nuance entre l'enum anonyme et l'attribut static const... Est-ce juste une diff�rence de lieur ?

  11. #11
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    Citation Envoy� par tut
    remarque : c'est ce que fait Visual pour la d�finition des ID de ressource pour les classes de dialogue.
    Par contre, j'ai du mal � saisir la nuance entre l'enum anonyme et l'attribut static const... Est-ce juste une diff�rence de lieur ?
    Un enum n'a pas d'existance dans le code g�n�r�. Du point de vue de l'�dition de lien, il a grosso modo la valeur d'un #define.
    Alors que lors de l'execution, un static const est stock� en m�moire.

  12. #12
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par d�faut
    Un enum ne peut-etre qu'un entier alors qu'un static const peut-etre tu type que l'on veut.

    Quand a mettre les globales dans un namespace :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    namespace maths
    {
    const double PI=3.14159;
    };
    c'est comme un enum, les variables const n'ayant pas d'existance en C++ (contrairement au C) il n'y aurra pas de gaspillage de m�moire...

  13. #13
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    Citation Envoy� par Gandalf
    c'est comme un enum, les variables const n'ayant pas d'existance en C++ (contrairement au C) il n'y aurra pas de gaspillage de m�moire...
    Alors c'est quelque chose que j'ignore. Tu as une r�f�rence la dessus ?
    En tout cas, mon compilateur C++, lui ne l'entends pas de cette oreille. Je peux poster le code de test si tu veux. Si les variable globale const n'avaient pas d'existance, il ne serait pas n�cessaire d'initialiser les membres statiques de classe.
    Jusqu'� la preuve du contraire ceci est faux

    EDIT: g++ 3.4.0

  14. #14
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par d�faut
    Une reference, tous les tutoriaux et cours de C++ enumerant les differences entre le C et la partie du C++ qui est compatible avec le C...

    mais aussi Le Stroustrup Edition sp�ciale Francaise p 106


    Cela est n'est bien sur pas le cas si la valeur de la constante n'est pas connue au moment de la compilation (resultat d'une fonction par exemple)

  15. #15
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    Mouais, je ne suis pas convaincu, et je doute que cela marche avec autre chose que des types scalaires. Franchement j'ai du mal � comprendre comment cela pourrait �tre compatible avec des contraintes de compilation s�par�e.
    Mais, par acquis de conscience, j'ai test� l� chose. Mes r�sultats exp�rimentaux ne correspondent pas � ce que tu dis.

    Maintenant, si tu as un pointeur sur une doc accessible, je veux bien r�viser mon jugement. Mes recherches sur google demeurant infructueuses.

  16. #16
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    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 296
    Par d�faut
    Le Stroustrup VF 3e revu et corrig� par Michel Michaud ou un des pr�c�dents ? (ils contiennent divers contre-sens)

    Sinon, un brouillon du comit� qui peut traiter de ces d�tails est le document n1359. Je vous laisse l'�plucher
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  17. #17
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    J'attend toujours ta doc Gandalf

Discussions similaires

  1. Gestion de variables globales dans une classe Thread
    Par man84 dans le forum G�n�ral Java
    R�ponses: 13
    Dernier message: 04/05/2015, 14h19
  2. r�cuperation variable globale d'une class dans un autre
    Par FATENMRABET dans le forum D�buter avec Java
    R�ponses: 31
    Dernier message: 26/09/2013, 16h07
  3. Comment r�cup�rer une variable d�clar�e GLOBALE dans une classe PHP
    Par Globolite dans le forum EDI, CMS, Outils, Scripts et API
    R�ponses: 4
    Dernier message: 08/03/2013, 13h41
  4. R�ponses: 6
    Dernier message: 21/07/2009, 11h37
  5. Variables globales dans une fonction?
    Par Death83 dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 26/07/2006, 01h53

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