On ne peut redéfinir les opérateurs que pour les types structures, classes ou unions. Les autres en effet sont prédéclarés, avec des opérateurs fixés une fois pour toutes.
En particulier, on ne peut pas redéfinir les opérateurs pour les pointeurs ou les tableaux. Si lon souhaite un type fonctionnellement équivalent en redéfinissant certains opérateurs, il faut créer une classe. Voici un exemple imaginable :
class intptr { int *p; public : .... friend int operator*(exempleptr); } int operator*(exempleptr ep) // déréférencement spécial { // fait quelque chose de particulier ici }
Toutefois ce genre décriture est difficile et risqué, notamment à cause des problèmes de post- et pré-incrémentation (voir plus loin). Il est beaucoup plus fréquent de créer des classes équivalant à des tableaux (voir paragraphe sur lopérateur []
).
Tous les opérateurs sur les pointeurs sont redéfinissables (pour des classes), même ->
et ->*
. Notons toutefois que ->
doit obligatoirement renvoyer un pointeur ou une classe.
![]() | ![]() | Suivant ![]() |