#include #include "izraz.hpp" #include using namespace std; map tablica; Izraz::~Izraz() { } int Konstanta::vrednost() const { return _vrednost; } Izraz* Konstanta::kopija() const { return new Konstanta(*this); } void Konstanta::ispisi() const { cout << _vrednost; } int Promenljiva::vrednost() const { return tablica[_ime]; } Izraz* Promenljiva::kopija() const { return new Promenljiva(*this); } void Promenljiva::ispisi() const { cout << _ime; } BinOp::~BinOp() { delete _levi; delete _desni; } BinOp::BinOp(const BinOp& z) { _levi = z._levi->kopija(); _desni = z._desni->kopija(); } BinOp& BinOp::operator=(const BinOp& z) { if (this != &z) { delete _levi; delete _desni; _levi = z._levi->kopija(); _desni = z._desni->kopija(); } return *this; } int Zbir::vrednost() const { return _levi->vrednost() + _desni->vrednost(); } Izraz* Zbir::kopija() const { return new Zbir(*this); } void Zbir::ispisi() const { cout << "( "; _levi->ispisi(); cout << " + "; _desni->ispisi(); cout << " )"; } int Razlika::vrednost() const { return _levi->vrednost() - _desni->vrednost(); } Izraz* Razlika::kopija() const { return new Razlika(*this); } void Razlika::ispisi() const { _levi->ispisi(); cout << " - "; _desni->ispisi(); } int Proizvod::vrednost() const { return _levi->vrednost() * _desni->vrednost(); } Izraz* Proizvod::kopija() const { return new Proizvod(*this); } void Proizvod::ispisi() const { cout << "( "; _levi->ispisi(); cout << " * "; _desni->ispisi(); cout << " )"; } int Kolicnik::vrednost() const { return _levi->vrednost() / _desni->vrednost(); } Izraz* Kolicnik::kopija() const { return new Kolicnik(*this); } void Kolicnik::ispisi() const { _levi->ispisi(); cout << " / "; _desni->ispisi(); } int Mod::vrednost() const { return _levi->vrednost() % _desni->vrednost(); } Izraz* Mod::kopija() const { return new Mod(*this); } void Mod::ispisi() const { _levi->ispisi(); cout << " mod "; _desni->ispisi(); } int Manje::vrednost() const { return _levi->vrednost() < _desni->vrednost(); } Izraz* Manje::kopija() const { return new Manje(*this); } void Manje::ispisi() const { _levi->ispisi(); cout << " < "; _desni->ispisi(); } int Vece::vrednost() const { return _levi->vrednost() > _desni->vrednost(); } Izraz* Vece::kopija() const { return new Vece(*this); } void Vece::ispisi() const { cout << "( "; _levi->ispisi(); cout << " > "; _desni->ispisi(); cout << ")"; } /* int main() { tablica["x"] = 3; tablica["y"] = 13; Izraz* v1 = new Promenljiva("x"); Izraz* v2 = new Promenljiva("y"); Izraz* k1 = new Konstanta(2); cout << v1->vrednost() << endl; cout << v2->vrednost() << endl; cout << k1->vrednost() << endl; Izraz* z = new Zbir(v1, k1); cout << z->vrednost() << endl; Izraz* r = new Razlika(v1, k1); cout << r->vrednost() << endl; Izraz* p = new Proizvod(v1, k1); cout << p->vrednost() << endl; Izraz* k = new Kolicnik(v1, k1); cout << k->vrednost() << endl; Izraz* m = new Mod(v1, k1); cout << m->vrednost() << endl; delete v1; delete v2; delete k1; delete z; delete r; delete p; delete k; delete m; return 0; } */