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 :

commen initialiser une r�f�rence qui est une variable d'instance?


Sujet :

C++

  1. #1
    Membre �clair� Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par d�faut commen initialiser une r�f�rence qui est une variable d'instance?
    Bonjour,

    Je souhaite cr�er une classe dont une variable d'instance est un tableau de 5 entiers (int tab[5]). Le dernier de ces 5 entiers a une signification bien particuli�re (appellons le "last" et sera acced� par les methodes de ma classe beaucoup plus souvent que les autres. Pour que mon code soit plus clair, je souhaite utiliser la variable "last" plutot que "tab[4]" pour acceder � cet entier.
    Mais last, C'EST tab[4], j'ai donc pens� � utiliser une r�f�rence. Seulement je ne sais pas comment l'initialiser:
    Si je r�duit le code au minimum:
    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
    class A
    {
    private:
      int tab[5];
      int& last;
    public:
      A();
    };
     
    A::A()
    {
      last = tab[4];
    }
     
    int main(void)
    {
     return 0;
    }
    message d'erreur:
    error C2758: 'A::last' : must be initialized in constructor base/member initializer list
    Ou dois-je initialiser "last"?
    Ou: est-ce une mauvaise id�e d'utiliser une r�f�rence? et dams ce cas que faire � la place?

    merci

  2. #2
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    Liste d'initialisation :
    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
    #include <iostream>
     
    class A
    {
    private:
      int tab[5];
      int & last;
    public:
      A();
    };
     
    A::A() : last(this->tab[4])
    {
     
    }
     
    int main(void)
    {
     return 0;
    }
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    r0d
    r0d est actuellement 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
    Il faut impl�menter ton constructeur en utilisant une liste d'intialisation (comme le dit le compilo ):

  4. #4
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Ou dois-je initialiser "last"?
    Comme le dit le compilo : dans la liste d'initialisations.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    A::A() :
    last(tab[4])
    {
     
    }

  5. #5
    r0d
    r0d est actuellement 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
    Citation Envoy� par Davidbrcz
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    A::A() : last(tab)
    {
     
    }
    Non, l� last va pointer directement sur tab.

  6. #6
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    Je m'en suis rendu compte , j'ai �dit�.
    Ja vais mal lu le message au dessue du code et je ne m�tait concentr� que sur le code.
    Honte a moi.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  7. #7
    Membre �clair� Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par d�faut

    Quelle rapidit�!
    3 messages post�s � 2 minutes d'intervalle

    Et en plus �a marche (vous n'en doutiez pas)

    merci � tous les trois!

    (pour le classement de la course je suis oblig� de mettre r0d en premier, puisque Davidbrcz a du �diter son post. C'est donc r0d qui gagne une tringle � rideaux! on l'applaudit bien fort)

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 7
    Dernier message: 21/03/2011, 13h36
  2. lien vers une page qui est une frame
    Par laurentSc dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 22
    Dernier message: 10/03/2011, 17h32
  3. R�ponses: 3
    Dernier message: 06/12/2010, 15h59
  4. R�ponses: 0
    Dernier message: 04/08/2010, 14h02
  5. R�ponses: 7
    Dernier message: 28/01/2007, 11h38

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