Написать интерактивную программу, выполняющую команды, вводимые пользователем с клавиатуры.
Объект КАЛЬКУЛЯТОР выполняет сложение, вычитание, умножение, деление вещественных чисел.
В примере приведены определения основных классов и типов и реализации только некоторых компонентных функций.
class TShema; class TObject //абстрактый класс - стоит во главе иерархии классов {protected: TShema* owner; public: TObject(); ~TObject(); virtual void HandleEvent(TEvent&); virtual void ClearEvent(TEvent&); }; class TShema::public TObject // абстрактная группа {protected: TItem* last; public: TShema(); ~TShema(); virtual void Insert(TObject*); virtual void HandleEvent(TEvent&); }; class TDevice: public TShema // абстрактное устройство управления {protected: int EndState; public: virtual void GetEvent(TEvent&); virtual void Execute(); virtual int Valid(); virtual void EndExec(); }; class TRec: public TObject/ устройство для хранения данных-регистр {protected: float x; public: TReg(); ~TReg(); float GetX(); void SetX(float&); }; class TCalc : public TDevice //калькулятор {pritected: TReg* sum; // указатель на сумматор TReg* reg; // указатель на регистр public: TCalc(); void HamdleEvent(TEvent&); void GetEvent(TEvent&); void Execute(); float GetSum(); // получить значение сумматора void PutSum(float); //занести число в сумматор voit Help(); }; class TAdd : public TObject // схема сложения {public: void HandleEvent(TEvent&); void Add(); }; TObject::TObject() {owner=0;} TShema::TShema() {last=0;} TCalc::TCalc() {TObject* r; sum=new TReg; reg=new TReg; r=new TAdd; Insert (sum); // и так далее для всех схем }; TCalc::HandleEvent(TEvent& event) {if(event.what==evMessage) switch(event.command) {cmQuit: EndExec(); ClearEvent(event); break; cmGet: cout<Предыдущая Оглавление СледующаяHandleEvent(event); r=r->next;} } } TAdd::HandleEvent(TEvent&event) {if(event.what==evMessage) switch(event.command) {cmAdd: //занести в регистр число (owner->reg)->SetX(event.A); //вызвать метод сложения Add(); ClearEvent(event); break; } } TAdd::Add() //в сумматор добавить содержимое регистра {float a,b; //получить значениm сумматора a=(owner->sum)->GetX(); //получить значение регистра b=(owner->reg)->GetX(); //изменить значение сумматора (owner->sum)->SetX(a+b); }