summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorHombreLaser <sebastian-440@live.com>2022-04-09 11:02:34 -0500
committerHombreLaser <sebastian-440@live.com>2022-04-09 11:02:34 -0500
commitae25e110ca9d65c4e2cfffef21abc16f26ac3739 (patch)
tree7cd18c66fec436952b138b21011848514f96eee1 /include
parent643e33711781fb5a2a3ffc1b8b4b0031bf9509a1 (diff)
Corregidos errores de destructores
Diffstat (limited to 'include')
-rw-r--r--include/expressions.hpp50
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 */