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 :

initialisation de variable d'instance


Sujet :

C++

  1. #1
    GO
    GO est d�connect�
    Membre confirm� Avatar de GO
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par d�faut initialisation de variable d'instance
    Pouvez-vous me dire ce que fait la ligne suivante (en gras), je pense qu'il y a une erreur ou est-ce un mode d�claration de variable (sans compter qu'il manque s�rement le ? :

    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
    class tableau
    {
        const int m_iTailleMax;
        const int *m_pDonnees;
    public:
        tableau(int iTailleMax);
        ~tableau();
    };
    
    tableau::tableau(int iTailleMax) :
        m_iTailleMax(iTailleMax)    // Initialise la donn�e membre constante.
    {
        // Allocation d'un tableau de m_iTailleMax entr�es :
        m_pDonnees = new int[m_iTailleMax];
    }
    
    tableau::~tableau()
    {
        // Destruction des donn�es :
        delete[] m_pDonnees;
    }
    Merci

  2. #2
    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
    C'est la syntaxe d'initialiseur de membre.
    C'est l'unique moyen d'initialiser une donn�e constante ou une r�f�rence.
    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.

  3. #3
    Membre chevronn�
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    D�tails du profil
    Informations personnelles :
    �ge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par d�faut
    Et aussi d'initialiser une classe m�re. cf. la FAQ, pour plus de d�tails.

  4. #4
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Ou d'appeler un constructeur autre que celui par d�faut pour les variables membres.

  5. #5
    Invit� de passage
    Inscrit en
    Octobre 2006
    Messages
    1
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1
    Par d�faut
    non il ne manque pas de ;

  6. #6
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 297
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 297
    Billets dans le blog
    2
    Par d�faut
    A ce propos, je n'ai jamais compris la diff�rence entre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    tableau::tableau(int iTailleMax) :
        m_iTailleMax(iTailleMax)
    {}
    et
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    tableau::tableau(int iTailleMax)
    {
        m_iTailleMax = iTailleMax;
    }

  7. #7
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    D�tails du profil
    Informations personnelles :
    �ge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par d�faut
    Citation Envoy� par r0d
    A ce propos, je n'ai jamais compris la diff�rence entre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    tableau::tableau(int iTailleMax) :
        m_iTailleMax(iTailleMax)
    {}
    et
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    tableau::tableau(int iTailleMax)
    {
        m_iTailleMax = iTailleMax;
    }
    Si je ne me trompes pas (ce qui est bien possible ) :

    Dans le premier cas, l'espace m�moire pour m_iTailleMax est allou� et directement initialis� avec iTailleMax.
    Dans le deuxi�me cas, l'espace m�moire pour m_iTailleMax est allou� (sans initialisation), puis la valeur de iTailleMax est recopi�e dans m_iTailleMax.

    Pour les types de 'base', �a n'a pas tellement d'importance. Mais pour les objets, la seconde solution est moins optimis�e puisque tu as une construction de l'objet puis une affectation (au lieu d'une construction par copie parexemple).

    Il est pr�f�rable de prendre de bonnes habitudes et des syst�matiquement utiliser la liste d'initialisation pour les variables membres.

  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'ajouterai que la m�thode <construction par d�faut puis affectation>, en plus d'�tre plus lente que la m�thode <construction avec les bon param�tres d�s le d�but> a l'inconv�nient de ne pas marcher dans tous les cas, car il y a plein de cas o� affecter n'est pas possible (r�f�rence, donn�e membre constante, donn�e membre d'un type n'yant pas d'op�rateur =...)
    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.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 05/07/2010, 22h25
  2. R�ponses: 6
    Dernier message: 26/06/2007, 18h36
  3. R�ponses: 11
    Dernier message: 07/04/2005, 10h20
  4. [VB6]Initialiser une variable Static dans un �venement
    Par loverdose dans le forum VB 6 et ant�rieur
    R�ponses: 16
    Dernier message: 20/01/2005, 14h57
  5. R�ponses: 9
    Dernier message: 29/06/2004, 08h40

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