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 :

Comment initialiser mes variables ?


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 64
    Par d�faut Comment initialiser mes variables ?
    Bonjour,

    Je viens de me poser la question suivante : Quand dois-je d�clarer mes variables dans ma classe ? Et quand dois-je d�clarer mes variables dans mes m�thodes ?

    Par exemple, dois-je faire �a ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    class A {
     
        public :
        A();
        void calcul();
     
        private :
        int i;
     
        void methode0();
        void methode1();
    }
     
    void A::methode0() {
        i = 2;
    }
     
    void A::methode1() {
        i+=4;
    }
     
    void A::calcul() {
        methode0();
        methode1();
        std::cout << i << std::endl;
    }
    ____________

    Ou �a ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class A {
        public :
        A();
    }
     
    int A::methode0() {
        int i = 2;
        return i;
    }
     
    void A::methode1(int &i) {
        i+=4;
    }
     
    void A::calcul() {
        int i = methode0;
        methode1(i);
        std::cout << i << std::endl;
    }
    Merci d'avance, car la d�claration de mes variables je les fait au filling et j'aimerais �tre m�thodique :-)

  2. #2
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Cela d�pend grandement de l'int�r�t de ta variable.
    Est-elle une information (interne) sur l'�tat de l'objet?
    Si oui, c'est qu'elle est pertinente dans toutes les fonctions membres, et vaut le coup d'�tre une variable membre.
    Si non, c'est du bruit inutile, qui alourdi la classe.

    Les variables membres maintiennent l'�tat de ton objet. L'�tat visible et l'�tat interne.
    Par exemple, pour un std::fstream, dans l'�tat visible, il y a normalement l'�tat du fichier (ouvert ou non, en lecture ou non, etc), la position actuelle dans le fichier.
    Dans son �tat interne, il y a peut-�tre un buffer pour soulager le syst�me (l'acc�s au fichier physique en lui-m�me est tr�s lent).

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

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    De mani�re g�n�rale, il est toujours utile de faire en sorte qu'une variable soit utilisable d�s sa cr�ation, sans avoir d'autres �tapes � entreprendre que le seul fait de la d�clarer. C'est, du moins, ce qui ressort de l'analyse de Coplien et qui n'a jamais �t� d�menti (il y a d'ailleurs bien peu de chances que ce soit d�menti un jour).

    Du coup, le meilleur endroit pour initialiser les donn�es membres d'une classe est le constructeur, de pr�f�rence en utilisation les listes d'initialisation.

    Par contre, la forme canonique orthodoxe de Coplien a �t� d�mentie sur plusieurs points, � savoir:
    1. le fait qu'il faut forc�ment un constructeur par d�faut (ne prenant aucun param�tre) pour la classe, car un tel constructeur n'a de sens que dans le cadre d'une classe ayant s�mantique de valeur. Un constructeur qui soit en mesure d'initialiser correctement toutes les donn�es membres s'av�re tr�s souvent bien plus utile.
    2. Le fait qu'il faut forc�ment un constructeur de copie et un op�rateur d'affectation, car de tels �l�ments n'ont aucun sens dans le cadre d'une classe ayant s�mantique d'entit�.

    A d�charge de Coplien, on peut faire valoir que, lorsqu'il a �mis sa suggestion, on n'avait pas encore pris toute la mesure de la diff�rence qui pouvait exister entre la s�mantique de valeur et la s�mantique d'entit�
    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

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Et � l'�poque, = delete n'existait pas. Il fallait donc syst�matiquement au moins d�clarer un constructeur de copie et op�rateur d'affectation, m�me si c'�tait juste pour les rendre priv�s.
    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.

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

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Oui, en effet, j'ai �t� un peu rapide dans ma description
    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

Discussions similaires

  1. initialiser mes variables en un seul clic
    Par ralf91 dans le forum C#
    R�ponses: 7
    Dernier message: 09/05/2008, 10h39
  2. R�ponses: 2
    Dernier message: 06/11/2007, 20h50
  3. Comment relier mes variables controls
    Par moniteur41 dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 15/09/2007, 18h36
  4. comment faire un export DISPLAY en perl ou comment initialiser une variable linux
    Par redgis01 dans le forum Programmation et administration syst�me
    R�ponses: 2
    Dernier message: 08/03/2007, 11h01
  5. R�ponses: 7
    Dernier message: 22/05/2006, 13h03

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