Bonjour à tous,
J'ai un petit soucis au niveau de l'héritage entre deux classes.
J'ai ma class mère qui est une class abstraite composée de :
et une fonction qui implémente cette class :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #ifndef EXPRESSION_H_ #define EXPRESSION_H_ class Expression { //Il n'y a encore aucune fonction dedans mais il pourrait sy' trouver //des méthodes pures }; #endif /*EXPRESSION_H_*/
Voila rien de bien compliqué et pourtant je ne suis pas si sûr de ça. Est-ce que ça vous semble correct?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #ifndef BINARY_H_ #define BINARY_H_ #include "Expression.h" #include "../AnalyseurLexical/Token.h" class Binary : private Expression { public: Binary(); void setExpression1(Expression* expr) {expression1 = expr;} void setExpression2(Expression* expr) {expression2 = expr;} void setOperator(Token* operat) {op = operat;} virtual ~Binary(); private : Token* op; //operator Expression* expression1; Expression* expression2; }; #endif /*BINARY_H_*/
Ensuite dans un autre fichier je fais une convertion entre les deux classes, je m'explique :
Sauriez vous me dire comment faire? Parce que avec l'astuce que je fais, le destructeur de Binary n'est jamais appelé et je me retrouve avec plein de fuite de mémoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Expression* e = conjunction(); b = new Binary(); b->setOperator(lexical.nextToken()); b->setExpression1(e); b->setExpression2(conjunction()); e = (Expression*) b; //e = dynamic_cast<Expression*>(b) ne fonctionne même pas à la compilation
Merci de votre aide,
Philippe
Partager