Інкремент ++ та Декремент - Перевантаження оператора в програмуванні на C ++

У цьому прикладі ви навчитесь перевантажувати оператори збільшення + та зменшення - в C ++.

Щоб зрозуміти цей приклад, ви повинні знати наступні теми програмування на C ++:

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

У цьому посібнику оператор збільшення + та зменшення - перевантажуються найкращим чином, тобто збільшують значення елемента даних на 1, якщо оператор ++ працює з об'єктом, і зменшують значення елемента даних на 1, якщо - оператор використовується.

Приклад 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; )

Вихідні дані

 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 ++ + Перевантаження оператора

Перевантаження оператора приросту до цього моменту є істинним лише у тому випадку, якщо він використовується у формі префікса.

Це модифікація вищезазначеної програми, щоб зробити цю роботу як для префіксної форми, так і для постфіксної форми.

 #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.

Цікаві статті...