class Const : public Expression {
public:
Const(int v) {
val = v;
}
int Evaluate() const override {
return val;
}
std::string ToString() const override {
return std::to_string(val);
}
private:
int val;
};
class Sum : public Expression {
public:
Sum(ExpressionPtr l, ExpressionPtr r) {
left = l;
right = r;
}
int Evaluate() const override {
return left->Evaluate() + right->Evaluate();
}
std::string ToString() const override {
return left->ToString() + '+' + right->ToString();
}
private:
ExpressionPtr left;
ExpressionPtr right;
};
class Product : public Expression {
public:
Product(ExpressionPtr l, ExpressionPtr r) {
left = l;
right = r;
}
int Evaluate() const override {
return left->Evaluate() * right->Evaluate();
}
std::string ToString() const override {
return left->ToString() + '*' + right->ToString();
}
private:
ExpressionPtr left;
ExpressionPtr right;
};