#ifndef __FUNKCIJE_HPP__ #define __FUNKCIJE_HPP__ 1 #include using namespace std; 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 x) :_v(x) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; private: double _v; }; class BinOp : public Funkcija { public: BinOp(Funkcija *i1, Funkcija *i2) :_levi(i1), _desni(i2) {} ~BinOp(); private: BinOp(const BinOp& z); BinOp& operator=(const BinOp &z); protected: Funkcija *_levi; Funkcija *_desni; }; class UnOp : public Funkcija { public: UnOp(Funkcija *i) :_arg(i) {} ~UnOp(); private: UnOp(const UnOp& z); UnOp& operator=(const UnOp &z); protected: Funkcija *_arg; }; class Zbir : public BinOp { public: Zbir(Funkcija *i1, Funkcija *i2) :BinOp(i1, i2) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class Razlika : public BinOp { public: Razlika(Funkcija *i1, Funkcija *i2) :BinOp(i1, i2) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class Proizvod : public BinOp { public: Proizvod(Funkcija *i1, Funkcija *i2) :BinOp(i1, i2) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class Kolicnik : public BinOp { public: Kolicnik(Funkcija *i1, Funkcija *i2) :BinOp(i1, i2) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class IdFja : public Funkcija { public: void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class Sin : public UnOp { public: Sin(Funkcija *i1) :UnOp(i1) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; class Cos : public UnOp { public: Cos(Funkcija *i1) :UnOp(i1) {} void ispisi() const; Funkcija* izvod() const; double vrednost(double x) const; }; #endif