// ННГУ, ВМК, Курс "Методы программирования-2", С++, ООП
//
// formval.h Copyright (c) Гергель В.П. 25.01.2003
//
// класс объектов-значений для формульных значений

#ifndef __FORMVAL_H
#define __FORMVAL_H

#include <string.h>
#include "datvalue.h"
#include "ftran.h"

#define FormLen  40

template <class TValue>
class TFormValue : public TDatValue {
  protected:
    TValue Value;            // значение
    char   Formula[FormLen]; // формула для вычисления значения
    double Param;            // значение параметра формулы
  private:
    FTRAN ft;                // формульный транслятор
  public:
    TFormValue(TValue val=0, const char *f="") { SetValue(val,f); }
    void SetValue(TValue val=0, const char *f="") {
      Value=val; SetFormula(f);
    }
    void SetFormula(const char *f="") {         // установить формулу
      strcpy(Formula,f); ft.expression(Formula);
    }
    TValue GetValue() { return Value; }         // получить значение
    TFormValue & operator=(const TValue &val) { // перегрузка присваивания
      SetValue(val); return *this;
    }
    TFormValue & operator=(const TFormValue &fval) { // перегрузка присваивания
      SetValue(fval.Value,fval.Formula); return *this;
    }
    operator TValue () const { return Value; }
    TValue GetValue(double par) {               // вычислить и вернуть значение
      double args[1], val;
      args[0] = par;
      if ( strlen(Formula) > 0 ) {
        ft.computing(args,&val); Param=par; Value=val;
      }
      return Value;
    }
    TDatValue * GetCopy() { return new TFormValue(Value,Formula); }
  protected:
    virtual void Print(ostream &os) {
      os << "Value = " << Value << ", Formula = " << Formula;
    }
};
#endif
// end of formval.h
Хостинг от uCoz