#ifndef __NAREDBA_HPP__ #define __NAREDBA_HPP__ 1 #include #include #include "izraz.hpp" using namespace std; class Naredba { public: virtual void izvrsi() const = 0; virtual ~Naredba(); }; class IspisStringa : public Naredba { public: IspisStringa(string s) :_s(s) {} void izvrsi() const; private: string _s; }; class IspisIzraza : public Naredba { public: IspisIzraza(Izraz *i) { _i = i->kopija(); } void izvrsi() const; ~IspisIzraza(); private: IspisIzraza(const IspisIzraza& i); IspisIzraza& operator=(const IspisIzraza& i); Izraz *_i; }; class Blok : public Naredba { public: Blok(const vector &v); void izvrsi() const; ~Blok(); private: Blok(const Blok& b); Blok& operator=(const Blok& b); vector _naredbe; }; class Dodela : public Naredba { public: Dodela(string s, Izraz *i) { _s = s; _i = i->kopija(); } void izvrsi() const; ~Dodela(); private: Dodela(const Dodela& d); Dodela& operator=(const Dodela& d); string _s; Izraz *_i; }; class Unesi : public Naredba { public: Unesi(string s) :_s(s) {} void izvrsi() const; private: string _s; }; class AkoJeOnda : public Naredba { public: AkoJeOnda(Izraz *i, Naredba *n) { _i = i->kopija(); _n = n; } void izvrsi() const; ~AkoJeOnda(); private: AkoJeOnda(const AkoJeOnda& d); AkoJeOnda& operator=(const AkoJeOnda& d); Izraz *_i; Naredba *_n; }; class AkoJeOndaInace : public Naredba { public: AkoJeOndaInace(Izraz *i, Naredba *n1, Naredba *n2) { _i = i->kopija(); _n1 = n1; _n2 = n2; } void izvrsi() const; ~AkoJeOndaInace(); private: AkoJeOndaInace(const AkoJeOndaInace& d); AkoJeOndaInace& operator=(const AkoJeOndaInace& d); Izraz *_i; Naredba *_n1, *_n2; }; #endif