Salut,
Je suis en train de coder une petite classe de vecteurs (l'objet mathématique). Je code notamment les opérations produit scalaire, produit vectoriel etc...
J'ai ajouté des opérateurs amis ostream pour afficher mes vecteurs facilement à l'écran.
Imaginons que v1 et v2 soient deux vecteurs à 3 composantes v1(1,1,1) et v2(2,2,2).
Si * est l'opérateur de produit scalaire, alors v1*v2 donne 6.
je peux faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 vec v3; v3 = v1*v2; cout << v3 << endl;
mais je ne peux pas faire
sans avoir d'erreur à la compilation. Ce que je comprends c'est que le compilateur ne sait pas s'il doit appliquer l'opérateur '<<' avant ou après l'opérateur '*' dans l'instruction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cout << v1*v2 << endl;
Comment coder des règles de priorités entre les opérateurs surchargés ?
voici la partie "concernée" par le problème, de la classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 class vec { private : vector<double>c; public: vec(); vec(const double c0, const double c1, const double c2); //accesseurs en lecture/ecriture double & operator()(unsigned int); double operator()(unsigned int ) const; //opérateurs surchargés vec operator+(const vec &) const; vec operator*(const double ) const; double operator*(const vec &) const; vec operator^(const vec &) const; vec operator/(const double ) const; operator /vec & operator+=(const vec &); friend ostream & operator<<(ostream &, const vec &); };
Bien sûr je peux mettre des parenthèses autour de (v1*v2), mais je ne veux pas...
Merci,
A+
Partager