0 1 2
1 2 3
2 3 4
3 4 5
1. Dans la pratique, on sera amené à définir deux opérateurs () comme nous l’avions
fait dans l’exercice précédent pour l’opérateur [] : l’un pour des objets non
constants (celui défini ici), l’autre pour des objets constants (il sera prévu de
manière à ne pas pouvoir modifier l’objet sur lequel il porte).
2. Généralement, par souci d’efficacité, les opérateurs tels que () seront définis « en
ligne ».
3. On aurait pu songer à employer l’opérateur [] dont l’utilisation s’avère plus naturelle
que celle de l’opérateur (). Cependant, [] ne peut être surdéfini que sous forme
binaire. Il n’est donc pas possible de l’employer sous la forme t[i, j] pour accéder
à un élément d’un tableau dynamique. On pourrait alors penser à l’utiliser sous la
forme habituelle t[i][j]. Or, cette écriture doit être interprétée comme (t[i]) [j]), ce
qui signifie qu’on n’y applique plus le second opérateur à un objet de type int2d.
Comme, de surcroît, [] doit être défini comme fonction membre, l’écriture en
question demanderait de définir [] pour une classe int2d, en s’arrangeant pour qu’il
fournisse un résultat (« vecteur ligne ») lui-même de type classe. Dans ce dernier
cas, il faudrait également surdéfinir l’opérateur [] pour qu’il fournisse un résultat de
type int. Pour obtenir le résultat souhaité, il serait alors nécessaire de définir
d’autres classes que int2d.
216
Précédent

- 217/398

Suivant