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