Инкремент ++ и Декремент - Претоварване на оператора при програмиране на C ++

В този пример ще се научите да претоварвате операторите на инкремент ++ и декремент в C ++.

За да разберете този пример, трябва да имате познанията по следните теми за програмиране на C ++:

  • C ++ класове и обекти
  • Конструктори на C ++
  • Претоварване на оператора C ++

В този урок операторът инкремент ++ и декременти - претоварват се по най-добрия възможен начин, т.е. увеличават стойността на член с данни с 1, ако операторът ++ работи върху обект и намаляват стойността на член на данни с 1 if - оператор се използва.

Пример 1: Префикс ++ Increment Operator Overloading без тип връщане

 #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; )

Изход

 i = 0 i = 1

Първоначално, когато обектът obj е деклариран, стойността на члена на данните i за обект obj е 0 (конструкторът инициализира i до 0).

Когато операторът ++ се експлоатира на obj, void operator++( )се извиква операторска функция , която увеличава стойността на члена на данни i до 1.

Тази програма не е пълна в смисъл, че не можете да използвате код:

 obj1 = ++ obj;

Това е така, защото върнатият тип операторска функция в горната програма е невалиден.

Ето малката модификация на горната програма, за да можете да използвате код obj1 = ++obj.

Пример 2: Префикс 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; )

Изход

 i = 0 i = 0 i = 1 i = 1

Тази програма е подобна на горната.

Единствената разлика е, че връщащият тип операторска функция е Check в този случай, което позволява да се използват и двата кода ++obj; obj1 = ++obj;. Това е така, защото връщаната от функцията оператор temp се съхранява в обект obj.

Тъй като върнатият тип операторска функция е Check, можете също да присвоите стойността на 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.

Интересни статии...