Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1582 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  opérateurs d'incrémentation : ++Taz vs. Taz++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

opérateurs d'incrémentation : ++Taz vs. Taz++

n°470360
Taz
bisounours-codeur
Posté le 29-07-2003 à 00:11:00  profilanswer
 

comme vous le savez déjà, le C++ permet la surcharge d'opérateurs. ce soir, on se penche sur l'opérateur d'incrémentation (tout ce qui sera dit ici est valable pour l'opérateur de décrémentation)
 
l'opérateur ++ existe sous 2 formes: la post et la pre incrémentation (i++ et ++i). Je ne fais pas de rappels sur l'utilisation.
 
Nous allons voir comment les surcharger et pourquoi les killers utilisent toujours quand ils le peuvent l'opérateur de pré-incrémentation.
 
pour la première partie, le code parle de lui même.
 - pré-incrémentation Taz& operator++(), pas de problème on peut renvoyer une référence à l'object
 - post-incrémentation Taz operator++(int), on revoie une copie selon la sémantique générale (le paramètre int sert uniquement à différencier les versions)
 
pour la deuxième partie: i++ est en fait une surcouche à ++i. penser à son coportement: incrémenter i et retourner son ancienne valeur, c'est donc tres facile à implémenter à partir de ++i. tout l'enjeu consiste à retourner l'ancienne valeur, il faut donc mémoriser une copie: si on en s'en sert OK, sinon quel gachis! vous allez me dire, ça ne coute rien... mais sur un objet, si. pensez aux itérateurs qui vous permettent de vous ballader à travers de (très) grandes séquences: vous ecriver i++ et à chaque fois vous créez sans le savoir un itérateur inutile. je vous rassure tout de suite, pour les types de bases, le compilateur optimise ce genre de chose. mais pour vos types persos, encore heureux qu'il fasse ce qu'on lui dit. Pensez qu'un itérateur c'est souvent 2/3 pointeurs: j'ai récemment eu l'exemple d'un iterateur pesant 12*8 octets. Les copies inutiles ça peut donc vous pénaliser, et surtout, c'est trop bête puisque c'est inutile.
 
petit exemple de code pour vous convaincre
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class Taz
  4. {
  5.   int i;
  6.  
  7.   public:
  8.  
  9.   Taz()
  10.   {
  11.     cout << "Constructeur trivial" << " &" << &i << endl;
  12.   }
  13.  
  14.   /* explicit */ Taz(int j)
  15.    : i(j)
  16.   {
  17.     cout << "Constructeur i = " << i << " &" << &i << endl;
  18.   } 
  19.  
  20.   Taz(const Taz &f)
  21.     : i(f.i)
  22.   {
  23.     cout << "Constructeur par recopie i = " << i << " &" << &i << " (source &" << &f.i << ')' << endl;
  24.   }
  25.  
  26.   ~Taz()
  27.   {
  28.     cout << "~Destructeur i = " << i << " &" << &i << endl;
  29.   } 
  30.  
  31.   Taz& operator+=(const Taz &other)
  32.   {
  33.     this->i+=other.i;
  34.     return *this;
  35.   }
  36.  
  37.   Taz& operator++()
  38.   {
  39.     cout << "pre-incrementation" << endl;
  40.     ++i;
  41.     return *this;
  42.   }
  43.   Taz operator++(int)
  44.   {
  45.     cout << "post-incrementation" << endl;
  46.     Taz temp(*this);
  47.     ++i;
  48.     cout << "Copie de retour ";
  49.     return temp;
  50.   }
  51. };
  52. int main()
  53. {
  54.   Taz a;
  55.   cout << endl;
  56.   a++;
  57.   cout << endl;
  58.   ++a;
  59.   cout << endl;
  60. }


Message édité par Taz le 06-09-2003 à 13:22:16
mood
Publicité
Posté le 29-07-2003 à 00:11:00  profilanswer
 

n°470381
jagstang
Pa Capona ಠ_ಠ
Posté le 29-07-2003 à 00:52:56  profilanswer
 

d'ou le ++Taz.
 
D'ailleurs il est ou ton ++pseudo ?


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°470383
Taz
bisounours-codeur
Posté le 29-07-2003 à 00:55:44  profilanswer
 

JagStang a écrit :

d'ou le ++Taz.
 
D'ailleurs il est ou ton ++pseudo ?

parti (mass rename) par ce qu'être modo avec des ++ pose un problème


Message édité par Taz le 29-07-2003 à 00:56:13
n°470391
jagstang
Pa Capona ಠ_ಠ
Posté le 29-07-2003 à 01:04:02  profilanswer
 

je me disais bien...
 
Merci pour tes récentes contributions en tout cas


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°470430
skeye
Posté le 29-07-2003 à 07:53:04  profilanswer
 

Très intéressant!!
J'ai déjà lu qu'il valait mieux utiliser ++i que i++, mais sans explication ca me paraissait un peu magique...
Je suppose que sur une boucle à la con

Code :
  1. for(int i = 0; i < MAX; i++)


 
on ne gagne pas énormément, tout de même... :??:

n°470433
*syl*
--&gt; []
Posté le 29-07-2003 à 08:00:24  profilanswer
 

Tu gagnes rien avec les types de bases, t'sais pas lire !?

n°470435
skeye
Posté le 29-07-2003 à 08:05:19  profilanswer
 

*Syl* a écrit :

Tu gagnes rien avec les types de bases, t'sais pas lire !?


Il est encore tôt... :sleep:  [:skeye]

n°509221
blackgodde​ss
vive le troll !
Posté le 06-09-2003 à 13:16:58  profilanswer
 

merci bcp pour cette explication encore  :jap:


---------------
-( BlackGoddess )-
n°509244
drasche
Posté le 06-09-2003 à 13:48:11  profilanswer
 

Je vais bientôt pouvoir jeter mon vieux bouquin de C++, tout le contenu sera ici bientôt :D
 
merci :jap:

n°509249
Taz
bisounours-codeur
Posté le 06-09-2003 à 13:56:05  profilanswer
 

drasche a écrit :

Je vais bientôt pouvoir jeter mon vieux bouquin de C++, tout le contenu sera ici bientôt :D
 
merci :jap:

si quelqu'un me propose un système à la blog pour écrire ça un peu plus joli et faire une bonne mise en forme, faire un petit répertoire d'articles, par ce que sur le forum, tout disparait. ou alors faut que je garde des liens vers tout ça dans ma signature en permanence
 
edit: et puis non j'ai pas envie de retaper. si les gens sont intéressés, ils feront une recherche.


Message édité par Taz le 06-09-2003 à 14:04:47
mood
Publicité
Posté le 06-09-2003 à 13:56:05  profilanswer
 

n°509284
benou
Posté le 06-09-2003 à 16:10:32  profilanswer
 

t'as quà faire une FAQ C++ ...


---------------
ma vie, mon oeuvre - HomePlayer
n°509288
Taz
bisounours-codeur
Posté le 06-09-2003 à 16:19:15  profilanswer
 

ben non. je réponds pas à des questions courantes, j'aime le principe de petit article découverte

n°509295
schnapsman​n
Zaford Beeblefect
Posté le 06-09-2003 à 16:39:37  profilanswer
 
n°509314
Kristoph
Posté le 06-09-2003 à 18:22:45  profilanswer
 

Taz a écrit :

si quelqu'un me propose un système à la blog pour écrire ça un peu plus joli et faire une bonne mise en forme, faire un petit répertoire d'articles, par ce que sur le forum, tout disparait. ou alors faut que je garde des liens vers tout ça dans ma signature en permanence
 
edit: et puis non j'ai pas envie de retaper. si les gens sont intéressés, ils feront une recherche.


 
Un truc comme un wiki ? Ca permet des discutions comme sur un forum mais ça classe les articles par mot clefs et non pas par date.

n°509315
Taz
bisounours-codeur
Posté le 06-09-2003 à 18:26:58  profilanswer
 

ouais pourquoi pas
 
pour tout ce qui ne concerne pas ce topic ->
http://forum.hardware.fr/forum2.ph [...] 234&cat=10
 
(je nettoirais dans quelques jours)


Message édité par Taz le 06-09-2003 à 18:34:31

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  opérateurs d'incrémentation : ++Taz vs. Taz++

 

Sujets relatifs
Problème d'auto incrémentation sous VB - Accesssurcharge d'opérateurs ?
probleme d'incrementation de structure.Function et incrémentation....
Opérateurs et héritage[help] bases relationnelles\les operateurs ensemblistes
Comment faire une calculette sous vb(opérateurs)pb de auto incrementation
[C/C++]Conversion decimal hexa et incrementation?[java] ca existe les surcharges d'opérateurs ??
Plus de sujets relatifs à : opérateurs d'incrémentation : ++Taz vs. Taz++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR