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 :

Surcharger l'opérateur +=


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut Surcharger l'opérateur +=
    Bonjour a tous,
    je debutte sur C++,

    J'ai deux questions,

    je butte sur une explication du tuto sur C++, et plus precisement sur l'operator+= .

    Voici le prototype :
    dans le fichier .h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Duree& Operator+=(Duree const &Duree);
    je ne comprend pas comment cela fonctionne
    Le & sur le premier Duree ( avant Operator ) pointe sur quoi sur cette ligne : sur Duree, ( avant Operator ) ?
    ou sur Operator+= ???


    Dans le fichier .cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Duree& Duree::operator+=(const Duree &Duree2)
    {
    m_secondes += duree2.m_secondes;
     
    Return *this;
    }


    La ligne : Return *this pointe elle sur Duree& ( avant Operator ), ou sur quoi ?


    Merci pour vos reponses.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Vous confondez pointeur et référence.
    le "&" après un type correspond au marqueur pour les références, comme le "*" est un marqueur pour les types pointeurs.

    Le & sur le premier Duree ( avant Operator ) pointe sur quoi sur cette ligne : sur Duree, ( avant Operator ) ?
    Ce "Duree&" indique que l'opérateur retournera une référence sur un objet de type Duree, pratique pour chainer les opérateurs (sur un += c'est pas forcement si pratique).

    La ligne : Return *this pointe elle sur Duree& ( avant Operator ), ou sur quoi ?
    Votre extrait de code est syntaxiquement incorrect. Le return doit être dans les parenthèses.

    this est un pointeur sur l'objet courant.
    donc "*this" est l'objet courant (déférencement de pointeur).

    Comme l'opérateur renvoie une référence sur une durée et pas une durée, c'est une référence sur l'objet courant qui est renvoyé (référence ~= à un pointeur carrossé pour empêcher de faire des conneries avec et l'utiliser comme un objet et pas comme un pointeur, vu de l'extérieur). Si l'opérateur retourner une "Duree" et pas une "Durée&", il devrait avoir une copie de l'objet courant car l'objet retourné ne référencerait plus l'objet courant.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Vous confondez pointeur et référence.
    le "&" après un type correspond au marqueur pour les références, comme le "*" est un marqueur pour les types pointeurs.
    Je sais que & est un alias, de meme * pour les pointeurs est un marqueur, c'est la syntaxe du prototype qui m'embrouille .


    Citation Envoyé par bacelar Voir le message
    Ce "Duree&" indique que l'opérateur retournera une référence sur un objet de type Duree, pratique pour chainer les opérateurs (sur un += c'est pas forcement si pratique).


    Citation Envoyé par bacelar Voir le message
    Votre extrait de code est syntaxiquement incorrect. Le return doit être dans les parenthèses.
    Rectifié, merci.


    Citation Envoyé par bacelar Voir le message
    this est un pointeur sur l'objet courant.
    donc "*this" est l'objet courant (déférencement de pointeur).

    Comme l'opérateur renvoie une référence sur une durée et pas une durée, c'est une référence sur l'objet courant qui est renvoyé (référence ~= à un pointeur carrossé pour empêcher de faire des conneries avec et l'utiliser comme un objet et pas comme un pointeur, vu de l'extérieur). Si l'opérateur retourner une "Duree" et pas une "Durée&", il devrait avoir une copie de l'objet courant car l'objet retourné ne référencerait plus l'objet courant.
    Dans l'exemple donné l'objet courant c'est lequel : m_secondes += ??

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Dans l'exemple donné l'objet courant c'est lequel : m_secondes += ??
    Bin, c'est m_secondes, quoi d'autre ???

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Merci , j'avais juste besoin de confirmation.

    Bonne soirée.

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

Discussions similaires

  1. [C#] Tri d'objet et surcharge d'opérateur
    Par Royd938 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/12/2007, 00h26
  2. Petit probléme de surcharge d'opérateur .
    Par Clad3 dans le forum C++
    Réponses: 20
    Dernier message: 11/04/2005, 20h15
  3. Problème de surcharge d'opérateurs
    Par Hell dans le forum C++
    Réponses: 17
    Dernier message: 17/01/2005, 16h01
  4. Cumul de surcharges d'opérateurs
    Par Nats dans le forum C++
    Réponses: 2
    Dernier message: 11/10/2004, 13h37
  5. [VB .NET] Surcharge d'opérateur
    Par Franckintosh dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/09/2004, 19h05

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