русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Перезавантаження унарних операцій


Дата додавання: 2014-04-22; переглядів: 984.


Унарні операції мають лише один операнд. Прикладом унарної операції можуть бути операції зменшення і збільшення – та ++, або унарний мінус: -34.

Раніше (програма 11.4 ) ми створили клас Counter для зберігання значень лічильника. Об’єкт цього класу ми збільшували викликом методу:

c1.inc_count();

Він виконував свою роботу, але лістінг програми стане зрозумілішим, якщо ми використаємо замість цього запису операцію збільшення ++.

++с1;

Модернізуємо програму 11.4 так, щоб зробити цю дію можливою. Приведемо лістінг програми 10.1.

#include <iostream.h>

#include <conio.h>

#include <bios.h>

class Counter

{private:

unsigned int count;

public:

Counter():count(0) //Конструктор

{ };

 

void operator++()

{++count;}

 

unsigned int get_count()

{return count;}

};

 

int main()

{

clrscr();

Counter c1,c2;

cout << “\nc1=”<<c1.get_count();

cout <<”\nc2=”<<c2.get_count();

++c1;

++c2;

++c2;

cout << “\nc1=”<<c1.get_count();

cout <<”\nc2=”<<c2.get_count();

cout <<endl;

bioskey(0);

return 0;

}

Програма 10.1

В цій програмі ми створили два об’єкти класу Counter: c1 та c2. Значення лічильників виведені на дисплей, спершу вони рівні 0. Потім, використовуючи перезавантаження операції ++, ми збільшуємо с1 на 1, а с2 на 2. Операція ++ один раз використана по відношенню до с1 і двічі по відношенню до с2. В цьому прикладі ми використали префіксну версію операції ++, пізніше пояснимо також постфіксну форму.

 

Ключове слово operator

Як використати звичайні операції з визначеними користувачем типами? В цьому оголошенні використане ключове слово operator для перезавантаження операції ++

void operator++()

Спершу пишуть повернутий тип (в нашому випадку void), потім ключове слово operator, потім саму операцію (++) і нарешті список аргументів, взятий у дужки (в даному випадку порожній). Такий синтаксис повідомляє оператору, що коли аргумент належить класу Counter, то потрібно викликати функцію з таким іменем, зустрівши в тексті програми операцію ++.

Компілятор може розрізняти перезавантажувані функції за типом даним та кількістю аргументів (сигнатурою). Перезавантажувані операції компілятор розрізняє за типом даних їх операндів. Якщо операнд має базисний тип, такий як int в операторі

++intvar;

то компілятор буде використовувати свою вбудовану процедуру для збільшення змінної типу int. Але, якщо операнд є об’єктом класу Counter, то компілятор буде використовувати написану програмістом функцію operator++() (нагадаємо, що це явище називається поліморфізмом).

 


<== попередня лекція | наступна лекція ==>
Підсумок | Аргументи операції


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн