#pragma once

class Expression
	{
	protected:
		double _value; 
		bool _isEvaluated;
	//Конструкторы
		Expression():_isEvaluated(true) {};
		Expression(double value): _value(value), _isEvaluated(false) {};
	//	
	public:
		double value(); 
        virtual double eval() = 0;
		
	//Деструктор
		virtual ~Expression () {};
	//
};

double Expression:: value()
	{
	if (_isEvaluated) return (_value);
		else return (eval());
	}