revient à le considérer comme un point ayant cet entier pour abscisse et une ordonnée
nulle.
N.B. Si les arguments de operator= étaient transmis par référence, les deux dernières
affectations seraient rejetées, à moins d’avoir en plus prévu l’attribut const.
b. Cette fois, x == y est interprété comme x.operator == (y). Si x est de type point et y d’un
type pouvant se ramener au type point (c’est-à-dire soit du type pointcol qui sera
converti implicitement en un type de base point, soit d’un type entier qui sera
converti implicitement en un type point par l’intermédiaire du constructeur), aucun
problème ne se pose (c’est le cas de la troisième instruction).
Si x est de type pointcol et y d’un type pouvant se ramener au type point, on retrouve le
cas précédent, dans la mesure où la fonction membre operator ==, héritée de point,
peut toujours s’appliquer à un objet de type point (c’est le cas des instructions 1, 2 et
4).
En revanche, si x est de type int, il n’est plus possible de lui appliquer une fonction
membre. C’est ce qui se passe dans la dernière instruction, qui sera donc rejetée à la
compilation.
N.B. Si l’unique argument de operator= était transmis par référence, la quatrième
affectation serait rejetée, à moins d’avoir prévu en plus l’attribut const.
251
Précédent

- 252/398

Suivant