Skip to main content

struct Number : Expression

struct Expression
{
    virtual double evaluate() const = 0;
    virtual ~Expression() = 0;
};

struct Number : Expression
{
    Number(double value)
        : value(value)
    {}
    double evaluate() const {return value;};
    ~Number() {delete value};

private:
    double value;
};

struct BinaryOperation : Expression
{
    /*
      Здесь op это один из 4 символов: '+', '-', '*' или '/', соответствующих операциям,
      которые вам нужно реализовать.
     */
    BinaryOperation(Expression const * left, char op, Expression const * right)
        : left(left), op(op), right(right)
    { }
    double evaluate() const {
        switch(op){
            case '+': return(left->evaluate() + right->evaluate());
            case '-': return(left->evaluate() - right->evaluate());
            case '*': return(left->evaluate() * right->evaluate());
            case '/': return(left->evaluate() / right->evaluate());
        }
    };
    ~BinaryOperation() {
        left.~Expression;
        right.~Expression;
    };

private:
    Expression const * left;
    Expression const * right;
    char op;
};