русс | укр

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

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


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


Арифметичні операції


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


В програмі 11.5 ми розглядали два об’єкти класу Distance, які додавалися за допомогою методу add_dist()

dist3.add_dist(dist1,dist2);

Використовуючи перезавантаження операції +, ми можемо записати подібний вираз зрозуміліше:

dist3=dist1+dist2

Ця можливість реалізована в лістінгу програми 10.5

#include <iostream.h>

#include <conio.h>

#include <bios.h>

class Distance

{private:

int feet;

float inches;

public:

 

Distance():feet(0),inches(0.0) //конструктор без параметрів

{ }

 

//конструктор з 2 параметрами

Distance(int ft,float in):feet(ft),inches(in)

{ }

 

void getdist()

{cout <<”\nВведіть число футів “; cin >>feet;

cout << “дюймів “; cin>>inches;

}

 

void showdist()

{cout <<feet << “\’ “<< inches <<”\’’”;}

 

Distance operator+(Distance) const;

};

 

//Додавання d2 I d3

Distance Distance::operator+(Distance d2) const

{

int f=feet+d2.feet;

float i=inches+d2.inches;

if(i>=12.0)

{i-=12.0;

f++;}

return Distance(f,i);

}

 

int main()

{

clrscr();

Distance dist1,dist3,dist4;

dist1.getdist();

 

Distance dist2(11,6.25);

 

dist3=dist1+dist2;

dist4=dist1+dist2+dist3;

cout <<”\ndist1=”;dist1.showdist();

cout << “\ndist2=”;dist2.showdist();

cout << “\ndist3=”;dist3.showdist();

cout << “\ndist4=”;dist4.showdist();

cout <<endl;

bioskey(0);

return 0;

}

Програма 10.5

Для того, щоб показати, що результат додавання може бути використаний в інших операціях, ми виконали в функції main() такі дії: додали dist1, dist2, dist3, одержавши dist4.

Оголошення методу operator+() в класі Distance виглядає так:

Distance Distance::operator+(Distance d2)

Ця операція повертає значення типу Distance і приймає один аргумент типу Distance.

У виразі

dist=dist1+dist2

важливо розуміти, до яких об’єктів відноситимуться аргументи і значення, що повертаються. Коли компілятор зустрічає цей вираз, він проглядає типи аргументів. Виявивши лише аргументи типу Distance, він виконує операції виразу, використовуючи метод класу Distance operator+(). Але який з об’єктів використовується в якості аргументу цієї операції – dist1 чи dist2? Чи не потрібно нам використовувати два аргументи, оскільки ми додаємо два об’єкти?

Існує правило: об’єкт з лівої сторони операції (в нашому випадку dist1)б викликає функцію оператора. Об’єкт, що стоїть справа від знаку операції, повинен бути переданий в функцію у якості аргумента. Операція повертає значення, яке ми потім використовуємо для своїх потреб.

В функції operator+() до лівого операнда ми маємо прямий доступ, використовуючи feet та inches, оскільки це об’єкт, що викликає функцію. До правого операнда ми маємо доступ як до аргументу функції, тобто як d2.feet та d2.inches.

Ми можемо узагальнити раніше викладене і сказати, що перезавантаженій операції завжди потрібно на 1 менше аргументів, ніж кількість операндів, оскільки один з операндів є об’єктом, що викликає функцію. Тому для унарних операцій не потрібні аргументи (крім функцій та операторів, дружніх до класу, яку ми вивчатимемо в майбутньому).

Для обчислення значення функції operator+() ми спершу додаємо значення feet та inches обох операндів (коректуючи результат при потребі). Одержані значення f та i використовуємо при ініціалізації безіменного об’єкту класу Distance, який використовуватиметься у виразі

return Distance (f,i);

Схожі методи можна створити в класі Distance для перезавантаження інших операцій. Тоді ми зможемо виконувати віднімання, множення і ділення з об’єктами цього класу, використовуючи звичайний запис виразів.

 


<== попередня лекція | наступна лекція ==>
Постфіксні операції | Об’єднання рядків


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