Surcharge d'operateur et compilation

Surcharge d'operateur et compilation - C++ - Programmation

Marsh Posté le 28-12-2004 à 09:14:29    

Bonjour à quiconque voudra m'aider.
Voila j'ai un projet consernant les polynômes à n indeterminees
et j'ai un souci lors de l'execution de ce projet.
 
Le code compile mais lorsque j'execute le .exe il n'affiche pas la dernière ligne de commande qui est :

Code :
  1. cout<<p;


ou p represente un polynome.
Pour construire un polynome j'ai eu recours à un première classe qui gere les monomes à n indeterminees.
 
//monome.cpp

Code :
  1. #include <iostream>
  2. #include <math>
  3. using namespace std;
  4. const int MAX_IND=100;
  5. class monome{
  6. float a;
  7. int n;
  8. int buffer[MAX_IND];
  9. public:
  10. monome(){a=0;n=0;buffer[MAX_IND]=0;};
  11. float coef(){return a;};
  12. int nbv(){return n;};
  13. ...
  14. ostream& operator<<(ostream& o, monome m ){
  15. o<<m.coef()<<'.';
  16. for(int k=0;k<m.nbv()-1;k++){
  17. o<<'X'<<k+1<<'^'<<m.buffer[k]<<'.';
  18. };
  19. o<<'X'<<m.nbv()<<'^'<<m.buffer[m.nbv()-1];
  20. return o;
  21. };
  22. istream& operator>>(istream& i, monome& m){
  23. cout<<"quel est le coefficient du monome : ";
  24. i>>m.a;
  25. cout<<"quel est le nombre d'indeterminees : ";
  26. i>>m.n;
  27. if(m.n<0 || m.n>MAX_IND){
  28. cout<<"veuillez entrer une valeur comprise entre 0 et "<<MAX_IND<<" : "<<"\n";
  29. i>>m.n;
  30. };
  31. for(int k=0;k<m.n;k++){
  32. cout<<"quel est le degre de votre "<<k+1<<"eme indeterminee : ";
  33. i>>m.buffer[k];
  34.  if(m.buffer[k]<0){
  35.  cout<<"entrez une valeur positive pour le degre : ";
  36.  i>>m.buffer[k];};
  37. };
  38. return i;
  39. };


 
 
maintenant pour la classe polynome j'ai fait ça
//polynome.cpp

Code :
  1. #include<iostream>
  2. using namespace std;
  3. const int MAX=128;
  4. class polynome{
  5. monome buffer[MAX];
  6. int l;
  7. public:
  8. polynome(){l=0;};
  9. int longueur(){return l;};//le nombre de monome
  10. ...
  11. ostream& operator<<(ostream& o, polynome p){
  12. o<<'(';
  13. for(int k=0;k<p.longueur();k++)
  14. o<<p.buffer[k]<<" ";
  15. o<<')';
  16. return o;
  17. };
  18. istream& operator>>(istream& i, polynome& p){
  19. cout<<"de combien de monome(s) est constitué votre polynome ? ";
  20. i>>p.l;
  21. if(p.l<0 || p.l>MAX){
  22. cout<<"veuillez entrer une valeur comprise entre 0 et "<<MAX<<" : "<<"\n";
  23. i>>p.l;};
  24. for(int k=0;k<p.l;k++){
  25. cout<<"entrez votre "<<k+1<<"eme monome "<<"\n";
  26. i>>p.buffer[k];};
  27. return i;
  28. };


 
La saisie du polynome fonctionne mais l'affichage qui ne s'execute pas.
Voila mon jeu de test. J'ai suivi les conseils de suizokukan
//test.cpp

Code :
  1. #include"monome.cpp"
  2. #include"polynome.cpp"
  3. void main(void){
  4. polynome p;
  5. cin>>p;
  6. cout<<"la longueur du polynome est : "<<p.longueur()<<"\n";
  7. cout<<"le degre gloabal est : "<<p.deg_glo()<<"\n";
  8. cout<<p;
  9. };


 
Voila si vous pouviez m'expliquer, s'il vous plait, pourquoi il n'execute pas cette derniere ligne  :??:  


---------------
Le sourire est une invention britannique. Pour être précis, les Anglais l'ont rapporté de leur campagne japonaise
Reply

Marsh Posté le 28-12-2004 à 09:14:29   

Reply

Marsh Posté le 28-12-2004 à 10:21:39    

J'aurais fait un truc du genre :

Code :
  1. struct monome
  2. {
  3. friend ostream& operator<<(ostream&, monome& );
  4. friend istream& operator>>(istream&, monome& );
  5. };
  6. ostream& operator<<(ostream&, monome& )
  7. {
  8. ///
  9. }
  10. istream& operator>>(istream&, monome& )
  11. {
  12. ///
  13. }


et pareil pour polynome....


Message édité par xterminhate le 28-12-2004 à 10:21:56

---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 28-12-2004 à 10:25:38    

Ligne 11 et 15 sont en conflit au sujet de la taille du tableau.  
 
D'autre part, c'est pas Palace d'afficher des choses dans un operateur >>.
 
Ensuite, c'est immonde de faire des #include de fichiers cpp. Il vaut mieux que tu te fasses un makefile ou un projet et que tu demandes à ton linker de faire son boulot.
 
Et sinon, pense à flusher ton affichage. Le plus simple, c'est de faire un "cout << endl;" à la fin.
 
Voilà, je passe sur le reste, parce que je suis pressé :)
 
 

Reply

Marsh Posté le 28-12-2004 à 10:28:43    

Effectivement, buffer[MAX_IND]=0 ne met pas à 0 tous les entiers de ton tableau.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 28-12-2004 à 10:30:09    

xterminhate a écrit :

Effectivement, buffer[MAX_IND]=0 ne met pas à 0 tous les entiers de ton tableau.


Il y a surtout qu'il n'en met aucun à 0, puisque les indices du tableau sont dans l'intervalle [0,MAX_IND-1]. La question est donc: qu'est-ce qui est mis à 0 ?

Reply

Marsh Posté le 28-12-2004 à 10:36:42    

Tu peux également remplacer :

Code :
  1. monome(){a=0;n=0;buffer[MAX_IND]=0;};


par

Code :
  1. monome() : a(0), n(0) { fill( buffer, buffer + MAX_IND, 0 ); }


C'est bien de l'initialisation que tu fais. Avec un vector< int > plutot qu'un int[] tu t'en sortirais encore plus élégamment.


Message édité par xterminhate le 28-12-2004 à 10:38:49

---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 28-12-2004 à 10:38:33    

Lam's a écrit :

Il y a surtout qu'il n'en met aucun à 0, puisque les indices du tableau sont dans l'intervalle [0,MAX_IND-1]. La question est donc: qu'est-ce qui est mis à 0 ?


Et oui ! Mystère...


---------------
Cordialement, Xterm-in'Hate...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed