Monday, October 16, 2017

Increment and Decrement operator overloading in C++

In C++ you can overload both prefix and postfix increment and decrement operators like that:

class Dummy
{
public:
Dummy() :value(0) {}
Dummy(int pmValue) : value(pmValue) {}
Dummy(const Dummy& dummy) : value(dummy.getValue()) {}

int getValue() const
{
return value;
}
//---------------------------------------- Prefix
Dummy& operator++()
{
++value;

return *this;
};

Dummyoperator--()
{
--value;

return *this;
};
//---------------------------------------- Postfix
Dummy operator++(int)
{
Dummy lvDummy(*this);
++value;

return lvDummy;
};

Dummy operator--(int)
{
Dummy lvDummy(*this);
--value;

return lvDummy;
};

private:
int value;
};

If you had a problem with postfix ones, you just needed to add a parameter. Keep in mind that according to C++ standard (page 327, 13.5.7), the parameter must be int. Oh, you can also overload all of them globally following the same principle:

class Dummy
{
public:
Dummy() :value(0) {}
Dummy(const Dummy& dummy) : value(dummy.value) {}
Dummy(int pmValue) : value(pmValue) {}

int value;
};

Dummy& operator ++ (Dummy& dummy) {
++dummy.value;

return dummy;
}

Dummy& operator -- (Dummy& dummy) {
--dummy.value;

return dummy;
}

Dummy operator ++ (Dummy& dummy, int) {
Dummy lvDummy(dummy);
++dummy.value;

return lvDummy;
}

Dummy operator -- (Dummy& dummy, int) {
Dummy lvDummy(dummy);
--dummy.value;

return lvDummy;
}


No comments:

Post a Comment