OVH Cloud OVH Cloud

Surcharge et priorité

39 réponses
Avatar
Etienne Rousee
Bonsoir,

J'écris une bibliothèque de polynômes et j'ai
quelques problèmes avec l'opérateur exposant (^).
J'ai écrit toutes les surcharges nécessaires et
ceci par, exemple, compile:
Polynome P = (X^3) - 6 * (X^2) + 9 * X - 4;
Par contre, ceci ne compile pas:
Polynome P = X^3 - 6 * X^2 + 9 * X - 4;
Par ailleurs X^2 - 1 compile et donne X.
Je n'ai donc pas la bonne priorité.

Y a-t-il moyen d'arranger ça ?

--

Etienne

9 réponses

1 2 3 4
Avatar
Etienne Rousee
"Vincent Lascaux" a écrit ...
On peut aussi imaginer ca :

struct pow
{
pow(int exp)
: exp(exp)
{ }
int exp;
};


Et VC6 refuse ce qui suit:

Polynome operator * (const Polynome& p, const pow& e)
{
return pow(p, e.exp);
}


Il l'accepte si je change quelques pow en power par exemple.

--

Etienne

Avatar
Fabien LE LEZ
On 28 Dec 2005 01:50:36 -0800, "kanze" :

En revanche, je connais bien LaTeX. En LaTeX, ^ est l'opérateur
de superscript ; ce n'est l'opérateur de puissance que dans la
mesure que le superscript en question représente une puissance.


Et d'ailleurs il représente parfois un indice, quand on n'a plus de
place en bas pour le mettre.

Avatar
Vincent Lascaux
Et VC6 refuse ce qui suit:

Polynome operator * (const Polynome& p, const pow& e)
{
return pow(p, e.exp);
}


Il l'accepte si je change quelques pow en power par exemple.


Ah oui... Mais bon, c'est pas comme si j'aurais du tester ce que j'écris,
hein ? :)

--
Vincent


Avatar
kanze
Vincent Lascaux wrote:
Et VC6 refuse ce qui suit:

Polynome operator * (const Polynome& p, const pow& e)
{
return pow(p, e.exp);
}


Il l'accepte si je change quelques pow en power par exemple.


Ah oui... Mais bon, c'est pas comme si j'aurais du tester ce
que j'écris, hein ? :)


Et ce n'est pas comme si tester aurait forcément révéler le
problème. Le problème (je suppose), c'est que pow est déjà
défini, dans <math.h>. Si tu as inclu <math.h>, le code ne se
compile pas. Sinon, si un autre en-tête que tu as inclu inclut
<math.h>. Dans la pratique, malgré ce qui est écrit dans la
norme, l'inclusion (directe ou indirecte) de <cmath> aurait le
même effet. Si tu n'écris que le bout de code en question, sans
inclure quoique ce soit, ça doit marcher.

Note que dans la déclaration de la fonction, on pourrait écrire :

Polynome operator*( Polynome const& p, class pow const& e )

Mais l'appel à pow dans la function invoquera toujours la
fonction pow, et non le constructeur de la classe pow.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
Etienne Rousee
"kanze" a écrit ...
Mais l'appel à pow dans la function invoquera toujours la
fonction pow, et non le constructeur de la classe pow.


Oui, c'est bien ça.

--

Etienne

Avatar
Etienne Rousee
"Fabien LE LEZ" a écrit ...
Tant qu'à n'utiliser qu'une seule variable, autant construire le
polynôme (x^2 + 2x - 3) comme suit :

Polynome p;
p << 1 << 2 << -3;
Voire
p= 1, 2, -3; /* Il me semble que c'est possible, mais avec un
hack immonde */

ou encore
Polynome p= CreePolynome() << 1 << 2 << -3;


Et pour le coup, si tu veux construire le
polynôme (x^2005 + 2x - 3) , t'es pas rendu...

--

Etienne

Avatar
Fabien LE LEZ
On Thu, 29 Dec 2005 09:30:46 +0100, "Etienne Rousee"
:

Polynome p= CreePolynome() << 1 << 2 << -3;


Et pour le coup, si tu veux construire le
polynôme (x^2005 + 2x - 3) , t'es pas rendu...


On doit pouvoir faire un truc du genre

p= 1,2005 << 2,1 << -3,0;


Avatar
Jean-Marc Bourguet
Fabien LE LEZ writes:

On Thu, 29 Dec 2005 09:30:46 +0100, "Etienne Rousee"
:

Polynome p= CreePolynome() << 1 << 2 << -3;


Et pour le coup, si tu veux construire le
polynôme (x^2005 + 2x - 3) , t'es pas rendu...


On doit pouvoir faire un truc du genre

p= 1,2005 << 2,1 << -3,0;


Je préfère encore la surcharge de ^.

A+


--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
Fabien LE LEZ
On 29 Dec 2005 19:31:24 +0100, Jean-Marc Bourguet :

Je préfère encore la surcharge de ^.


C'est normal. J'ai tenté de trouver l'interface la plus catastrophique
possible.

1 2 3 4