#ifndef __FUNCIJE_HPP__ #define __FUNCIJE_HPP__ 1 class Funkcija { public: virtual void ispisi() const = 0; virtual Funkcija* izvod() const = 0; virtual double vrednost(double x) const = 0; virtual ~Funkcija() { } }; class Konstanta : public Funkcija { public: Konstanta(double v) :_v(v) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; private: double _v; }; class Promenljiva : public Funkcija { public: void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class BinOp : public Funkcija { public: BinOp(Funkcija *levi, Funkcija *desni) :_levi(levi), _desni(desni) {} ~BinOp(); private: BinOp(const BinOp&); BinOp& operator=(const BinOp&); protected: Funkcija *_levi, *_desni; }; class Zbir : public BinOp { public: Zbir(Funkcija *levi, Funkcija *desni) :BinOp(levi, desni) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class Razlika : public BinOp { public: Razlika(Funkcija *levi, Funkcija *desni) :BinOp(levi, desni) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class Proizvod : public BinOp { public: Proizvod(Funkcija *levi, Funkcija *desni) :BinOp(levi, desni) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class Kolicnik : public BinOp { public: Kolicnik(Funkcija *levi, Funkcija *desni) :BinOp(levi, desni) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class UnOp : public Funkcija { public: UnOp(Funkcija *f) :_f(f) {} ~UnOp(); private: UnOp(const UnOp&); UnOp& operator=(const UnOp&); protected: Funkcija *_f; }; class Sin : public UnOp { public: Sin(Funkcija *f) :UnOp(f) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class Cos : public UnOp { public: Cos(Funkcija *f) :UnOp(f) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; #endif