У вас есть два способа перегрузить два оператора (префикс / постфикс) ++ для типа T:
Метод объекта:
Это самый простой способ, использующий "общую" идиому ООП.
class T
{
public :
T & operator++() // ++A
{
// Do increment of "this" value
return *this ;
}
T operator++(int) // A++
{
T temp = *this ;
// Do increment of "this" value
return temp ;
}
} ;
Функция, не являющаяся членом объекта:
Это еще один способ сделать это: пока функции находятся в том же пространстве имен, что и объект, на который они ссылаются, они будут учитываться, когда компилятор будет искать функцию для обработки ++t ;
или t++ ;
код:
class T
{
// etc.
} ;
T & operator++(T & p_oRight) // ++A
{
// Do increment of p_oRight value
return p_oRight ;
}
T operator++(T & p_oRight, int) // A++
{
T oCopy ;
// Copy p_oRight into oCopy
// Do increment of p_oRight value
return oCopy ;
}
Важно помнить, что с точки зрения C ++ (включая точку зрения компилятора C ++) эти функции, не являющиеся членами, все еще являются частью интерфейса T (если они находятся в одном и том же пространстве имен).
Существует два потенциальных преимущества нотации функции, не являющейся членом:
- Если вам удастся закодировать их, не сделав их другом T, вы увеличите инкапсуляцию T
- Вы можете применить это даже к классам или структурам, чей код вам не принадлежит. Это ненавязчивый способ улучшить интерфейс объекта без изменения его объявления.