// ННГУ, ВМК, Курс "Методы программирования-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