Non, je vais encore plus loin. op+(T,T) marche et suffit pour T+A et A+T à condition qu'il y ait une conversion implicite de A vers T.
Maintenant, il peut s'avérer intéressant de proposer les surcharges pour des questions d'optimisation. Ainsi, ajouter directement un monôme de degré d à un polynôme économisera une allocation de mémoire et une boucle où l'on ajouterait plein de zéros (dans le cas des représentations vecteur) -- c'est aussi ce qui est fait dans le standard entre char const* et std::string.
PS:
pour les signatures (premier jet -- ma prochaine étape : je vais réviser les expressions templates) que j'utiliserais, cf un de mes messages d'hier.
J'étais pas loin j'avais juste oublié le const&, mais euh ... ça marche tjrs pas ! sniff !
EDIT :
J'ai lu quelque part que la conversion implicite ne fonctionnais pas pour les classes templates, et de fais dans mon test j'ai retransformer ma classe en non templates (sans modifié quoi que se soit d'autre) et ça fonctionne !!
Donc est-il vrai que la conversion implicite ne fonctionne pas en templates ??
Non ils sont les 2 justes relisez l'article correctement la deuxième n'est pas une division euclidienne. Et regardez les notes et références, je doute que le Laboratoire Jean Kuntzmann publie des démonstrations complétement faussés.
Dites, je n'ai pas l'impression que ma réponse ait été prise en compte (pour le cryptage XOR), j'ai envoyé un mp à Reponse_Exercice mais le message est toujours en non lu, est-ce normal ?
Si si t'en fais pas. J'utilise lu/non-lu pour trier. Ton code faisait une lecture sur eof() -> pas OK.
EDIT: Plus de 1000 réponses !
D'accord, pardonnez mon ignorance c'est la première fois que j'ai posté une réponse alors je découvre un peut
EDIT:
Bon, maintenant que j'ai ajouté la dérivée et les primitives j'ai plus trop d'idée d'ajout pour la classe ...
Donc a moins que quelqu'un est une idée d'ajout je vais pouvoir rendre ma copie !
Quelques idées rapidement (assez avancée théoriquement pour certaines):
1) Les polynomes peuvent être considérés comme des vecteurs d'un espace vectoriel. Pourquoi ne pas implémenter un produit scalaire et une norme ?
2) Les polynomes sont des fonctions, donc pourquoi ne pas implémenter une norme sur l'espace vectoriel des fonctions. http://fr.wikipedia.org/wiki/Norme_(mathématiques)#En_dimension_infinie
3) On peut implémenter une fonction solve(P,Q) qui résoud l'équation P(x) == Q(x).
Pour ce qui est de resoudre des équations type P(x) = 0 ou P(x) = Q(x) j'avoue ne pas trop voir comment s'y prendre !
Est-il possible d'avoir une petite indication pour ce mettre sur la piste ??
Niveau norme de l'espace vectoriel d'une fonction, j'ai pas compris de quoi il était question.
D'avance merci à ce qui m'aiderons dans ma quête de perfectionnement !
PS : Ton TP à l'air effectivement interesant, Nanoc !
PS 2 : j'ai tester ma classe polynome avec ta correction de la classe Fraction et je trouve le résultat assez géniale (de même avec complex<Fraction> ) !! Je crois que du coup je vais aussi essayer de la recréer (j'avais pas participer).
Ouh, ça devient trop dur pour moi (je suis en seconde)...
C'est pour ceux qui veulent aller vraiment plus loin hein
Citation : guigui'
Pour ce qui est de resoudre des équations type P(x) = 0 ou P(x) = Q(x) j'avoue ne pas trop voir comment s'y prendre !
Est-il possible d'avoir une petite indication pour ce mettre sur la piste ??
Je ne vais pas donner un moyen de le faire (que je n'ai pas tester qui plus est), mais je peux donner deux pistes:
1) Algorithme de Newton.
2) Méthode de Horner.
Les deux ayant également besoin de la division euclidienne.
Pour l'espace vectoriel, laisse tomber si tu ne sais pas ce que c'est. Il faudrait un cours complet d'algèbre linéaire.
Oui. Les codes sont bien reçus, mais je ne les lis que quand la fin du mois arrive.
Ensuite, je ne cherche pas à corriger les codes reçus. Je n'ai malheureusement pas le temps pour ça. Si un code est bien et qu'il peut servir de correction, il est publié dans ce thread sinon, il ne se passe rien.
J'étais pas loin j'avais juste oublié le const&, mais euh ... ça marche tjrs pas ! sniff !
EDIT :
J'ai lu quelque part que la conversion implicite ne fonctionnais pas pour les classes templates, et de fais dans mon test j'ai retransformer ma classe en non templates (sans modifié quoi que se soit d'autre) et ça fonctionne !!
Donc est-il vrai que la conversion implicite ne fonctionne pas en templates ??
Bonjour, ma classe de polynômes avance bien cependant je fais face à une étrange difficulté.
J'ai défini la surcharge des opérateurs + entre 2 polynômes et << sur un flux mais lorsque je tente de faire :
cout << A + B << endl;
le compilateur m'insulte :
C:\Users\Fredos\Documents\Progz\C++\Polynomes\main.cpp||In function `int main(int, char**)':|
C:\Users\Fredos\Documents\Progz\C++\Polynomes\main.cpp|31|error: no match for 'operator<<' in 'std::cout << Polynome::operator+(const Polynome&)(((const Polynome&)((const Polynome*)(&B))))
alors que si je fais :
Polynome R = A + B;
cout << A << " + " << B << " = " << R << endl;
cela marche bien :
4x+3 + 2x-5 = 6x-2
J'ai beau tester plein de variantes, rien n'y fait... voyez-vous d'où peut venir le problème ?
Tiens il me semble que j'avais le même problème !!!
Mais je suis en templates et bêtement je m'étais dis que ça devais avoir un lien apparemment pas !
Si quelqu'un à une idée qu'il hésite pas !
Dans un autre projet j'avais eu le même problème. Il me semble que j'avais posé la question sur le forum C++ et j'avais pu résoudre grâce au réponses données.
En effet, ça permet d'utiliser la conversion implicite pour symétriser les opérateurs et donc éviter du travail inutile.
Et si j'ai bien compris, le friend n'est pas obligatoire si l'on passe par operator+= qui lui n'est pas libre.