Thursday, 17 July 2014

C++ Operator Overloading

//opoverloadfunc.C

#include<iostream>

using namespace std;

class traffic {
        int left, right;

        public:
        traffic() {}  //empty constructor
        traffic(int lt, int rt)
        {
                left = lt;
                right = rt;
        }

        void show()
        {
                cout << "left: " << left << endl;
                cout << "right: " << right << endl;
        }
        //operator overloading functions for + , - , * , / , = , ++ , --
        traffic operator+(traffic ob1);
        traffic operator-(traffic ob1);
        traffic operator*(traffic ob1);
        traffic operator/(traffic ob1);

        traffic operator++();
        traffic operator--();

        ~traffic()
        {
                cout << "in destructor" << endl;
        }
};
traffic traffic::operator+(traffic ob1)
{
        traffic temp;

        temp.left   = left + ob1.left;
        temp.right  = right + ob1.right;

        return temp;
}

traffic traffic::operator-(traffic ob1)
{
        traffic temp;
        temp.left = left - ob1.left;
        temp.right = right - ob1.right;
        return temp;
}

traffic traffic::operator*(traffic ob1)
{
        traffic temp;
        temp.left = left * ob1.left;
        temp.right = right * ob1.right;

        return temp;
}

traffic traffic::operator/(traffic ob1)
{
        traffic temp;
        temp.left = left/ob1.left;
        temp.right = right/ob1.right;

return temp;
}

traffic traffic::operator++()
{
        left++;
        right++;

        return *this;
}

traffic traffic::operator--()
{
        left--;
        right--;

        return *this;
}


int main()
{
        traffic ob1(10, 20), ob2(2,4);
        ob1.show();
        ob2.show();
        ob1 = ob1+ob2;
        ob1.show();
        ob1 = ob1 - ob2;
        ob1.show();

++ob1;
        ++ob2;

        ob1.show();
        ob2.show();
        --ob1;
        --ob2;
        ob1.show();
        ob2.show();


        ob1 =(ob1*ob2);
        cout << "multi" << endl;
        ob1.show();
        ob1 = ob1/ob2;
        ob1.show();
        return 0;
}

No comments:

Post a Comment