Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2729 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] expression infixée -> postfixée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] expression infixée -> postfixée

n°886155
burgergold
5$? va chez l'diable!
Posté le 29-10-2004 à 20:56:16  profilanswer
 

j'ai une expression, représenté par une file de symbole nommé rep (pour représentation)
 
dans ma classe expression, j'ai une méthode infVersPost, qui doit me retourner une expression, mais en postfixé (2 + 2 devient 2 2 +)
 
le traitement fonctionne plutot bien, je l'avais testé en déclarant la fonction en void et en remplacant l'expression appelante par celle postfixé
 
mais là j'en arrache pour retourner une expression, en gros je me fis sur un courriel du prof
 
 
"On peut alors créer dans la fonction la version postfixée et la retourner par valeur. Évidemment, il faudra faire un copieur d'expression. Il n'y a pas lieu de faire un copieur de file, car une file est un conteneur, mais c'est très bien de faire un copieur  d'expression, car une expression est un scalaire!"
 

Code :
  1. Expression Expression::infVersPost()const{
  2.   Expression inf,post;
  3.   inf=*this;   //on prend une copie du paramètre implicite
  4.   ...
  5.   return post; //on retourne par valeur le résultat
  6. }


 
voila que inf est considéré comme une file vide
je me doute que c'est parce que je n'ai pas de copieur pour ma classe expression, mais jsais pas trop quoi y placer, en sachant que je dois copier "l'expression" mais pas la file, j'comprends pas vraiment :/

mood
Publicité
Posté le 29-10-2004 à 20:56:16  profilanswer
 

n°886169
burgergold
5$? va chez l'diable!
Posté le 29-10-2004 à 21:23:56  profilanswer
 

je suis pas clair? jsais pas trop quoi ajouté, mais si vous comprenez pas une partie de mon problème, dites le, jvais tenter de clarifier

n°886192
Lam's
Profil: bas.
Posté le 29-10-2004 à 22:02:42  profilanswer
 

Eh oh, c'est pas un tchat ici :)
 
On a le droit de faire ses courses, prendre une douche, manger, etc. non ?
 
Bon, pour ton problème. Je pense que ton prof ne voulait pas que tu copies le contenu de l'objet file, plutôt que l'objet lui-même (qui risque de faire une shallow-copy plutôt qu'une deep copy).
 
J'extrapole:
 

Code :
  1. struct Expression {
  2.    enum Type {POSTFIX, PREFIX, INFIX };
  3.    Expression * returnPostFix() const = 0;
  4. };
  5. typedef std::vector<Expression> File;
  6. struct Operation : Expression {
  7.   File myFile;
  8.   enum Type {PLUS, MOINS, FOIS};
  9.   Operation(Expression::Type expressionType, Operation::Type operationType, const File & operands);
  10.   Expression * returnPostFix() const {
  11.      File f;
  12.      f.push_back(this->myFile.front());
  13.      f.push_back(this->myFile.back());
  14.      return new Operation(Expression::postfix, myFile.at(1), f);
  15.   }
  16. };
  17. struct Constante : Expression {
  18.   Expression * returnPostFix() const {
  19.      return new Constante(*this);
  20.   }
  21. };


Message édité par Lam's le 29-10-2004 à 22:04:38
n°886194
burgergold
5$? va chez l'diable!
Posté le 29-10-2004 à 22:06:55  profilanswer
 

je voulais pas pousser pour une réponse, mais jai eu de la difficulté à poser ma question alors j'ai cru qu'elle avait été mal comprise après quelques read du topic
 
sinon pour ton code, jcrois qu'on est pas rendu à ce niveau encore :/

n°886224
burgergold
5$? va chez l'diable!
Posté le 29-10-2004 à 22:50:17  profilanswer
 

en gros dans ma fonction infVersPost()
 
j'ai placé ca:
 

Code :
  1. cout << this->rep.estVide() << endl;
  2.   inf = *this;
  3.   cout << inf.rep.estVide() << endl;


 
et ca m'affiche:
 


0
1


 
je me doute que c'est surement quelque chose de con que je n'ai pas compris, mais je vois pas quoi :/

n°886233
Lam's
Profil: bas.
Posté le 29-10-2004 à 23:03:24  profilanswer
 

Tu n'as pas d'opérateur d'affectation, et comme inf est une expression (et non une référence sur expression), bah l'objet est vide.  
 
Donc soit tu transforme inf en référence ou pointeur, soit tu écrit un constructeur de recopie et tu surcharges l'opérateur d'affectation pour y mettre ton biniou.


Message édité par Lam's le 29-10-2004 à 23:04:21
n°886237
burgergold
5$? va chez l'diable!
Posté le 29-10-2004 à 23:13:50  profilanswer
 

Lam's a écrit :

Tu n'as pas d'opérateur d'affectation, et comme inf est une expression (et non une référence sur expression), bah l'objet est vide.  
 
Donc soit tu transforme inf en référence ou pointeur, soit tu écrit un constructeur de recopie et tu surcharges l'opérateur d'affectation pour y mettre ton biniou.


 
justement, l'opérateur d'affectation il fera quoi? il devra copier la file de mon objet (rep) dans mon objet inf
 
ca l'implique donc de surcharger l'opérateur d'affectation de la file, et le prof semble dire qu'il faut pas
 
et je peux pas avoir inf comme référence ou comme pointeur, car la conversion inf->post me demande de défiler la file :/

n°886239
Lam's
Profil: bas.
Posté le 29-10-2004 à 23:20:11  profilanswer
 

Bah oui, il faut pas faire, il a dit ton prof :) Mais je pensais que tu voulais vraiment pouvoir faire ceci=cela;
 
 
Regarde comment j'ai fait dans le code que j'ai mis. Je pense que c'est un bon début.

n°886266
burgergold
5$? va chez l'diable!
Posté le 30-10-2004 à 00:24:35  profilanswer
 

Lam's a écrit :

Bah oui, il faut pas faire, il a dit ton prof :) Mais je pensais que tu voulais vraiment pouvoir faire ceci=cela;
 
 
Regarde comment j'ai fait dans le code que j'ai mis. Je pense que c'est un bon début.


 
 :sweat:  
 
jvois pas
 
trop de truc que je connais pas ou que j'ai pratiquement jamais utilisé
 
edit: jviens d'envoyer un mail au prof pour qu'il tente de m'éclairer sur: comment copier une expression sans faire une copie de sa représentation


Message édité par burgergold le 30-10-2004 à 00:36:22
n°886270
Taz
bisounours-codeur
Posté le 30-10-2004 à 00:43:40  profilanswer
 

et le destructeur virtuel, ça te troue le cul :D ?
 
typedef std::vector<Expression> File;
--> manque une *


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] expression infixée -> postfixée

 

Sujets relatifs
expression reguliere formatage de donneesProbleme d'une simple expression reguliere [RESOLU]
Expression régulière c++Expression régulière PHP (enlever les balises <? et ?>)
Expression reguliere, capture et alternativeSurligner une expression recherchée dans une chaine de caractères
Problème d'expression régulièreExpression Reguliere cplx, need help.
[BASH] SED et expression régulière[ PHP ] Problème d'expression régulière... ([0-9]{1,2}\.[0-9]{1,2})
Plus de sujets relatifs à : [C++] expression infixée -> postfixée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR