#ifndef __FUNKCIJA_HPP__ #define __FUNKCIJA_HPP__ 1 #include #include #include #include using namespace std; class Funkcija { public: virtual double vrednost(double x) const = 0; virtual Funkcija* klon() const = 0; virtual ~Funkcija() { } virtual void ispis() const = 0; virtual Funkcija* izvod() const = 0; }; class Konstanta : public Funkcija { public: Konstanta(double c) :_c(c) {} double vrednost(double x) const; Funkcija* klon() const; void ispis() const; virtual Funkcija* izvod() const; private: double _c; }; class Promenljiva : public Funkcija { public: double vrednost(double x) const; Funkcija* klon() const; void ispis() const; virtual Funkcija* izvod() const; }; class BinOperator : public Funkcija { public: BinOperator(Funkcija* levi, Funkcija* desni) :_levi(levi->klon()), _desni(desni->klon()) {} ~BinOperator (); BinOperator(const BinOperator& z); BinOperator& operator=(const BinOperator& z); protected: Funkcija* _levi; Funkcija* _desni; }; class Zbir : public BinOperator { public: Zbir(Funkcija* i1, Funkcija* i2) :BinOperator(i1, i2) {} double vrednost(double x) const; Funkcija* klon() const; void ispis() const; virtual Funkcija* izvod() const; }; class Razlika : public BinOperator { public: Razlika(Funkcija* i1, Funkcija* i2) :BinOperator(i1, i2) {} double vrednost(double x) const ; Funkcija* klon() const ; void ispis() const; virtual Funkcija* izvod() const; }; class Proizvod : public BinOperator { public: Proizvod(Funkcija* i1, Funkcija* i2) :BinOperator(i1, i2) {} double vrednost(double x) const; Funkcija* klon() const; void ispis() const; virtual Funkcija* izvod() const; }; class Kolicnik : public BinOperator { public: Kolicnik(Funkcija* i1, Funkcija* i2) :BinOperator(i1, i2) {} double vrednost(double x) const; Funkcija* klon() const ; void ispis() const; virtual Funkcija* izvod() const; }; class UnOperator : public Funkcija { public: UnOperator(Funkcija* f) :_f(f->klon()) {} ~UnOperator (); UnOperator(const UnOperator& z); UnOperator& operator=(const UnOperator& z); protected: Funkcija* _f; }; class Sinus : public UnOperator { public: Sinus(Funkcija* i1) :UnOperator(i1) {} double vrednost(double x) const; Funkcija* klon() const ; void ispis() const; virtual Funkcija* izvod() const; }; class Kosinus : public UnOperator { public: Kosinus(Funkcija* i1) :UnOperator(i1) {} double vrednost(double x) const; Funkcija* klon() const ; void ispis() const; virtual Funkcija* izvod() const; }; #endif