diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/expressions.hpp | 50 |
1 files changed, 35 insertions, 15 deletions
diff --git a/include/expressions.hpp b/include/expressions.hpp index 908272f..974612d 100644 --- a/include/expressions.hpp +++ b/include/expressions.hpp @@ -7,27 +7,34 @@ #ifndef EXPRESSIONS_H #define EXPRESSIONS_H +/* Debido a que en eval() llamamos a la respectiva + función trigonométrica, hay un conflicto entre + nombres de las funciones definidas en cmath y + los nombres definidos aquí. Por esa razón decidí + renombrarlos con el prefijo i_ que significa + "identifier". Esto puede ser solucionado con un + namespace, pero es mucho pedo, así lo dejo.*/ enum trig_functions { - sin, - cos, - tan, - csc, - sec, - ctg + i_sin, + i_cos, + i_tan, + i_csc, + i_sec, + i_ctg }; class Expression { -private: - Expression *left; - Expression *right; - token_type type; public: Expression(Expression *left, Expression *right, token_type type); - virtual ~Expression() = 0; + virtual ~Expression() = default; std::string getRepr(); const Expression *getLeft(); const Expression *getRight(); + virtual float eval(int arg) = 0; protected: + Expression *left; + Expression *right; + token_type type; virtual void setRepr(); void delTree(); std::string repr{}; @@ -37,9 +44,11 @@ class Literal : public Expression { private: int value; public: - Literal(int value); + explicit Literal(int value); ~Literal(); int getValue(); + float eval(int arg) override; +protected: void setRepr() override; }; @@ -50,18 +59,21 @@ private: public: Function(Expression *arg, trig_functions name); ~Function(); + float eval(int arg) override; trig_functions getFunctionName(); - void setRepr() override; protected: void delTree(); + void setRepr() override; }; class Variable : public Expression { private: char name; public: - Variable(char name); + explicit Variable(char name); ~Variable(); + float eval(int arg) override; +protected: void setRepr() override; }; @@ -69,36 +81,44 @@ class AddExpression : public Expression { public: AddExpression(Expression *left, Expression *right); ~AddExpression(); + float eval(int arg) override; }; class SubExpression : public Expression { public: SubExpression(Expression *left, Expression *right); ~SubExpression(); + float eval(int arg) override; }; class NegationExpression : public Expression { public: - NegationExpression(Expression *right); + explicit NegationExpression(Expression *right); ~NegationExpression(); + float eval(int arg) override; +protected: + void setRepr() override; }; class DivisionExpression : public Expression { public: DivisionExpression(Expression *left, Expression *right); ~DivisionExpression(); + float eval(int arg) override; }; class MultiplicationExpression : public Expression { public: MultiplicationExpression(Expression *left, Expression *right); ~MultiplicationExpression(); + float eval(int arg) override; }; class PowerExpression : public Expression { public: PowerExpression(Expression *left, Expression *right); ~PowerExpression(); + float eval(int arg) override; }; #endif /* EXPRESSIONS_H */ |