#ifndef __IZRAZI_HPP__ #define __IZRAZI_HPP__ 1 #include using namespace std; class Izraz { public: virtual int vrednost() const = 0; virtual ~Izraz() { } }; class Konstanta : public Izraz { public: Konstanta(int vrednost) :_vrednost(vrednost) {} int vrednost() const { return _vrednost; } private: int _vrednost; }; class BinOp : public Izraz { public: BinOp(Izraz *levi, Izraz *desni) :_levi(levi), _desni(desni) {} ~BinOp(); protected: Izraz* _levi; Izraz* _desni; private: BinOp(const BinOp& z); BinOp& operator=(const BinOp& z); }; class Zbir : public BinOp { public: Zbir(Izraz *levi, Izraz *desni) :BinOp(levi, desni) {} int vrednost() const; }; class Razlika : public BinOp { public: Razlika(Izraz *levi, Izraz *desni) :BinOp(levi, desni) {} int vrednost() const; }; class Proizvod : public BinOp { public: Proizvod(Izraz *levi, Izraz *desni) :BinOp(levi, desni) {} int vrednost() const; }; class Kolicnik : public BinOp { public: Kolicnik(Izraz *levi, Izraz *desni) :BinOp(levi, desni) {} int vrednost() const; }; class Mod : public BinOp { public: Mod(Izraz *levi, Izraz *desni) :BinOp(levi, desni) {} int vrednost() const; }; class Promenljiva : public Izraz { public: Promenljiva(string s) :_s(s) {} int vrednost() const; private: string _s; }; class Manje : public BinOp { public: Manje(Izraz *levi, Izraz *desni) :BinOp(levi, desni) {} int vrednost() const; }; class Vece : public BinOp { public: Vece(Izraz *levi, Izraz *desni) :BinOp(levi, desni) {} int vrednost() const; }; #endif