priorité des opérateurs surchargés
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:
1 2 3 4
|
vec v3;
v3 = v1*v2;
cout << v3 << endl; |
mais je ne peux pas faire
Code:
1 2
|
cout << v1*v2 << endl; |
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.
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:
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+