#ifndef __FUNKCIJE_HPP__ #define __FUNKCIJE_HPP__ 1 class Funkcija { public: virtual void ispisi() const = 0; virtual ~Funkcija(); }; class Konstanta : public Funkcija { public: Konstanta(double v) :_v(v) {} void ispisi() const; private: double _v; }; class Identicka : public Funkcija { public: void ispisi() const; }; class BinOp : public Funkcija { public: BinOp(Funkcija *leva, Funkcija *desna) :_leva(leva), _desna(desna) {} ~BinOp(); private: BinOp(const BinOp& b); BinOp& operator=(const BinOp& b); protected: Funkcija *_leva, *_desna; }; class Zbir : public BinOp { public: Zbir(Funkcija *leva, Funkcija *desna) :BinOp(leva, desna) {} void ispisi() const; }; class Razlika : public BinOp { public: Razlika(Funkcija *leva, Funkcija *desna) :BinOp(leva, desna) {} void ispisi() const; }; class Proizvod : public BinOp { public: Proizvod(Funkcija *leva, Funkcija *desna) :BinOp(leva, desna) {} void ispisi() const; }; class Kolicnik : public BinOp { public: Kolicnik(Funkcija *leva, Funkcija *desna) :BinOp(leva, desna) {} void ispisi() const; }; class UnOp : public Funkcija { public: UnOp(Funkcija *f) :_f(f) {} ~UnOp(); private: UnOp(const UnOp& b); UnOp& operator=(const UnOp& b); protected: Funkcija *_f; }; class Sin : public UnOp { public: Sin(Funkcija *f) :UnOp(f) {} void ispisi() const; }; class Cos : public UnOp { public: Cos(Funkcija *f) :UnOp(f) {} void ispisi() const; }; #endif