OVH Cloud OVH Cloud

surcharge *= et

2 réponses
Avatar
Nicolas Aunai
salut,

je suis en train de faire une classe Matrice, et, après avoir surchargé
l'opérateur '*=', (qui renvoit *this), ainsi que l'opérateur de flux de
sortie '<<' j'aimerai rendre la chose suivante possible :


Matrice m(3,3,3); //lignes, colones, valeur
Matrice m1(3,3,4);

cout << m*=m4;

ça ne marche pas je ne comprends pas pourquoi, étant donné que mon
opérateur '*=' renvoit une référence vers mon objet 'm' après le
changement, et que ma surcharge de '<<' fonctionne correctement si je
fais :

cout << m;


qui a une explication ?

--
Nico,
http://astrosurf.com/nicoastro
messenger : nicolas_aunai@hotmail.com

2 réponses

Avatar
Guillaume LEMAÎTRE
Nicolas Aunai wrote:
salut,

cout << m*=m4;



tout est question de priorité d'évaluation entre opérateurs.
pour que ça marche il faut écrire

cout << ( m *= m4 );

Avatar
Loïc Joly
Nicolas Aunai wrote:

salut,

je suis en train de faire une classe Matrice, et, après avoir surchargé
l'opérateur '*=', (qui renvoit *this), ainsi que l'opérateur de flux de
sortie '<<' j'aimerai rendre la chose suivante possible :


Matrice m(3,3,3); //lignes, colones, valeur
Matrice m1(3,3,4);

cout << m*=m4;

ça ne marche pas je ne comprends pas pourquoi, étant donné que mon
opérateur '*=' renvoit une référence vers mon objet 'm' après le
changement, et que ma surcharge de '<<' fonctionne correctement si je
fais :

cout << m;


qui a une explication ?

L'opérateur << est plus prioritaire que l'opérateur * Ce qui te semblerait logique dans l'expression :


unsigned int aB;
unsigned int b14;
a *= b << 2;

--
Loïc