В этом примере вы научитесь перегружать операторы инкремента ++ и декремента в C ++.
Чтобы понять этот пример, вы должны знать следующие темы программирования на C ++:
- Классы и объекты C ++
- Конструкторы C ++
- Перегрузка оператора C ++
В этом руководстве операторы инкремента ++ и декремента - перегружены наилучшим образом, т. Е. Увеличивают значение члена данных на 1, оператор if ++ работает с объектом и уменьшает значение члена данных на 1 оператор if - используется.
Пример 1: Префикс ++ Перегрузка оператора приращения без возвращаемого типа
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) void operator ++() ( ++i; ) void Display() ( cout << "i=" << i << endl; ) ); int main() ( Check obj; // Displays the value of data member i for object obj obj.Display(); // Invokes operator function void operator ++( ) ++obj; // Displays the value of data member i for object obj obj.Display(); return 0; )
Вывод
я = 0 я = 1
Первоначально, когда объявляется объект obj, значение элемента данных i для объекта obj равно 0 (конструктор инициализирует i равным 0).
Когда оператор ++ работает с obj, void operator++( )
вызывается операторная функция, которая увеличивает значение элемента данных i до 1.
Эта программа не завершена в том смысле, что вы не можете использовать код:
obj1 = ++ obj;
Это потому, что тип возвращаемого значения операторной функции в приведенной выше программе недействителен.
Вот небольшая модификация вышеуказанной программы, чтобы вы могли использовать код obj1 = ++obj
.
Пример 2: Перегрузка оператора Prefix Increment ++ с возвращаемым типом
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) // Return type is Check Check operator ++() ( Check temp; ++i; temp.i = i; return temp; ) void Display() ( cout << "i = " << i << endl; ) ); int main() ( Check obj, obj1; obj.Display(); obj1.Display(); obj1 = ++obj; obj.Display(); obj1.Display(); return 0; )
Вывод
я = 0 я = 0 я = 1 я = 1
Эта программа похожа на приведенную выше.
Единственное отличие состоит в том, что в этом случае тип возвращаемого значения операторной функции - Проверить, что позволяет использовать оба кода ++obj;
obj1 = ++obj;
. Это потому, что temp, возвращаемый из операторной функции, сохраняется в объекте obj.
Поскольку типом возвращаемого значения операторной функции является проверка, вы также можете присвоить значение obj другому объекту.
Обратите внимание, что, = (оператор присваивания) не нужно перегружать, потому что этот оператор уже перегружен в библиотеке C ++.
Пример 3: Перегрузка оператора Postfix Increment ++
Перегрузка оператора приращения до этого момента верна только в том случае, если он используется в форме префикса.
Это модификация вышеуказанной программы, позволяющая работать как с префиксной, так и с постфиксной формой.
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) Check operator ++ () ( Check temp; temp.i = ++i; return temp; ) // Notice int inside barcket which indicates postfix increment. Check operator ++ (int) ( Check temp; temp.i = i++; return temp; ) void Display() ( cout << "i = "<< i <
Output
i = 0 i = 0 i = 1 i = 1 i = 2 i = 1
When increment operator is overloaded in prefix form;
Check operator ++ ()
is called but, when increment operator is overloaded in postfix form; Check operator ++ (int)
is invoked.
Notice, the int inside bracket. This int gives information to the compiler that it is the postfix version of operator.
Don't confuse this int doesn't indicate integer.
Example 4: Operator Overloading of Decrement -- Operator
Decrement operator can be overloaded in similar way as increment operator.
#include using namespace std; class Check ( private: int i; public: Check(): i(3) ( ) Check operator -- () ( Check temp; temp.i = --i; return temp; ) // Notice int inside barcket which indicates postfix decrement. Check operator -- (int) ( Check temp; temp.i = i--; return temp; ) void Display() ( cout << "i = "<< i <
Output
i = 3 i = 3 i = 2 i = 2 i = 1 i = 2
Also, unary operators like: !, ~ etc can be overloaded in similar manner.