русс | укр

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

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


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


Аргументи операції


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


В функції main() операція ++ застосована до об’єкту, як у виразі ++с1. Досі функція operator++() не мала аргументів. Що ж вона збільшує? Вона збільшує змінну count об’єкта, до якого застосовується. Оскільки методи класу завжди мають доступ до об’єктів класу, для яких були викликані, то ця операція не потребує аргументів.

 

Значення, що повертаються операцією

Функція operator++() програми 10.1 має невеличкий дефект. Ми можемо його виявити, якщо використаємо в функції main() рядок:

c1=++c2

Компілятор видасть повідомлення про помилку. Причиною її є те, що ми визначили тип void для повернутого значення функції operator++(). А в нашому виразі присвоювання буде запитана змінна типу Counter. Тобто компілятор запитуватиме значення змінної с2, після того як вона буде оброблена операцією ++, і присвоїть її значення змінній с1. Але, при даному нами визначенні в 10.1, ми не можемо використовувати ++ для збільшення об’єкту Counter у виразі присвоювання: з таким операндом може бути використана лише операція ++.

Для того, щоб мати можливість використовувати написаний нами operator++() у виразах присвоювання, нам необхідно правильно визначити тип значення, яке він повертає. Це зроблено в програмі 10.2

#include <iostream.h>

#include <conio.h>

#include <bios.h>

class Counter

{private:

unsigned int count;

public:

Counter():count(0) //constructor

{ cout <<"constructor"<<endl;};

 

Counter operator++()

{++count;

Counter temp;

temp.count=count;

return temp;

}

unsigned int get_count()

{return count;}

};

 

int main()

{clrscr();

Counter c1,c2;

cout << "\nc1="<<c1.get_count();

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

++c1;

c2=++c1;

cout << "\nc1="<<c1.get_count();

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

cout <<endl;

bioskey(0);

return 0;

}

Програма 10.2

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

++с1

тепер повертає значення, яке можна використовувати в інших виразах, таких як

с2=++с1;

 


<== попередня лекція | наступна лекція ==>
Перезавантаження унарних операцій | Тимчасові безіменні об’єкти


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