Comment surcharger l'opérateur ++ de deux manières différentes pour postfix a++
et prefix ++a
?
c++
operator-overloading
débutant
la source
la source
Réponses:
Devrait ressembler à ceci:
la source
Number operator++ (int)
prend unint
comme paramètre même si vous ne l'utilisez pas?++x
est le préfixe et appelle doncoperator++()
whilex++
est un suffixe et appelle doncoperator++(int)
La différence réside dans la signature que vous choisissez pour votre (vos) surcharge (s) de
operator ++
.Cité à partir de l' article pertinent sur ce sujet dans la FAQ C ++ (allez-y pour plus de détails):
PS: Quand j'ai découvert cela, tout ce que j'ai vu au départ était le paramètre factice, mais les différents types de retour sont en fait plus intéressants; ils pourraient expliquer pourquoi
++x
est considéré comme plus efficace qu'enx++
général .la source
Vous avez deux façons de surcharger les deux opérateurs (prefix / postfix) ++ pour un type T:
Méthode objet:
C'est le moyen le plus simple, en utilisant un langage POO "commun".
Fonction non membre d'objet:
C'est une autre façon de faire ceci: tant que les fonctions sont dans le même espace de noms que l'objet qu'elles font référence aussi, elles seront prises en compte lorsque le compilateur recherchera une fonction à gérer
++t ;
ou àt++ ;
coder:Il est important de se rappeler que, d'un point de vue C ++ (y compris un point de vue de compilateur C ++), ces fonctions non membres font toujours partie de l'interface de T (tant qu'elles sont dans le même espace de noms).
Il y a deux avantages potentiels de la notation de fonction non membre:
la source
Déclarez comme ceci:
Mettre en œuvre correctement - ne pas jouer avec ce que tout le monde sait faire (incrémenter puis utiliser, utiliser puis incrémenter).
la source
Je sais qu'il est tard, mais j'ai eu le même problème et j'ai trouvé une solution plus simple. Ne vous méprenez pas, c'est la même solution que celle du haut (publiée par Martin York). C'est juste un peu plus simple. Juste un peu. C'est ici:
La solution ci-dessus est un peu plus simple car elle n'utilise pas d'objet temporaire dans la méthode postfix.
la source