#pragma once

#include "expptr.h"

class Double
{
	/// Выражение.
	ExpPtr _exp;
public:

	/**
	 * Конструтор из Выражения.
	 *
	 * @param exp выражение
	 */
	Double(const ExpPtr & exp);

	/**
	 * Конструтор умолчания.
	 *
	 * Соответствует случаю неинициализированного значения.
	 */
	Double();

	/**
	 * Конструтор из значения.
	 *
	 * @param value значение
	 */
	Double(double value);
	
	/**
	 * Приведение к double.
	 */
	operator double();

	/**
	 * Выражение.
	 */
	ExpPtr & exp();

	/**
	 * Выражение (const).
	 */
	const ExpPtr & exp() const;
};

/**
 * Бинарный плюс.
 */
Double operator+(const Double & left, const Double & right);

/**
 * Бинарное умножение.
 */
Double operator*(const Double & left, const Double & right);
