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 :

[Opérateurs] i++ ou ++i


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Par défaut [Opérateurs] i++ ou ++i
    Salut à tous

    Dans le cas d'un int, il n'y a à ma connaissance aucune différence entre ++i et i++.

    Mais si je crée moi même une classe, et que je définis l'opérateur ++ (void operator++() ), seule l'expression ++i est reconnue par le compilo.

    Cela signifie sans doute que je pourrais aussi définir (différemment) l'opérateur ++ qui s'écrit après comme i++ ? Comment faire ?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    Pour redéfinir l'opérateur de post-incrémentation, reprends le prototype de l'opérateur de pré-incrémentation et ajoutes-y un argument de type int (pas la peine de l'utiliser, il n'est là que pour distinguer la post-incrémentation de la pré-incrémentation).

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Foa,
    Citation Envoyé par L. Sierra
    Dans le cas d'un int, il n'y a à ma connaissance aucune différence entre ++i et i++.
    Je n'aurais pas osé écrire ça.

    La différence, tu la connais, puisque tu veux implémenter la pré-incrémentation et la post-incrémentation.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    La post-incrémentation doit retourner l'ancienne valeur (une copie, donc).
    Sur GotW, il est conseillé de l'implémenter ainsi, en réutilisant l'opérateur ++ qu'on vient de redéfinir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MaClasse MaClasse::operator ++ (int dummy)
    {
       (void)dummy;
     
       MaClasse old(*this);
       ++(*this);
       return old;
    }
    Note qu'on ne retourne pas une référence ici, puisque c'est une copie.

    Évidemment, l'opérateur de post-incrémentation n'a de valeur que pour les types copiables. Si ton type est non-copiable, tu ne dois pas définir d'opérateur de post-incrémentation.
    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
    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
    Juste pour pinailler : moi quand je n'utilise pas un paramètre je préfère l'écrire comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MaClasse MaClasse::operator ++ (int)
    {
       MaClasse old(*this);
       ++(*this);
       return old;
    }

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

Discussions similaires

  1. [Binaire] Opérateurs de rotation dee bits ?
    Par Tifauv' dans le forum C
    Réponses: 3
    Dernier message: 09/11/2017, 11h29
  2. Opérateur de statistique
    Par Phil951 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 26/01/2004, 15h12
  3. Opérateur like
    Par Troopers dans le forum ASP
    Réponses: 3
    Dernier message: 15/09/2003, 19h19
  4. opérateur non applicable à ce type d'opérande
    Par Amon dans le forum Langage
    Réponses: 3
    Dernier message: 11/06/2003, 18h07
  5. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22

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