русс | укр

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

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


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


Об’єкти, що повертаються функцією


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


В програмі 9.6 ми бачили, що об’єкти можна передавати в функцію в якості аргументів. Тепер розглянемо, як функція може повертати об’єкт у викликаючу програму. Модифікуємо попередню програму (програма 9.7)

#include <iostream.h>

#include <conio.h>

#include <bios.h>

class Distance

{private:

int feet;

float inches;

public:

 

Distance():feet(0),inches(0.0) //constructor bez argumentiv

{ }

 

//constructor z 2 argumentamy

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

{ }

 

void getdist()

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

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

}

 

void showdist()

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

 

Distance add_dist(Distance); //Прототип

};

//dodavanna d2 i d3

Distance Distance::add_dist(Distance d2)

{

Distance temp;

temp.inches=inches+d2.inches;

if(temp.inches>=12.0)

{temp.inches-=12.0;

temp.feet++;}

temp.feet+=feet+d2.feet;

return temp;

}

 

int main()

{

clrscr();

Distance dist1,dist3;

Distance dist2(11,6.25);

dist1.getdist();

dist3=dist1.add_dist(dist2);

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

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

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

cout <<endl;

bioskey(0);

return 0;

}

Програма 9.7

Хоча програми 9.6 та 9.7 схожі, різниця між ними вказує на важливі аспекти роботи функцій з об’єктами.

В прикладі 9.6 два об’єкти були передані в якості аргументів в функцію add_dist() , а результат був збережений в об’єкті dist3, методом якого і є викликана функція add_dist(). В програмі 9.7 в якості аргумента в функцію add_dist() передається лише один аргумент: об’єкт dist2. dist2 додається до об’єкту dist1, до якого відноситься викликаний метод add_dist(). Результат повертається в функцію main() і присвоюється об’єкту dist3.

dist3=dist1.add_dist(dist2);

Такий запис доволі близький до природного. Ще більш спростити його можна за допомгою використання перезавантажених функцій.

Функція add_dist() з прикладу 9.7 виглядає так:

Distance Distance::add_dist(Distance d2)

{

Distance temp;

temp.inches=inches+d2.inches;

if(temp.inches>=12.0)

{temp.inches-=12.0;

temp.feet++;}

temp.feet+=feet+d2.feet;

return temp;

}

Всередині функції створюється тимчасовий об’єкт класу Distance. Цей об’єкт зберігає значення обчисленої суми доти, доки вона не буде повернута викликаючій програмі. Сума обчислюється шляхом додавання двох об’єктів класу Distance. Перший з об’єктів – dist1, по відношенню до якого функція add_dist() є методом, другий об’єкт dist2 передається в функцію у якості аргумента. Звертання до його полів з функції виглядає так: d2.feet та d2.inches. Результат додавання зберігається в об’єкті temp і звертання до його полів виглядає так: temp.feet та temp.inches. Значення об’єкту temp повертається у викликаючу програму за допомогою оператора

return temp

Викликаюча програма main() присвоює значення, повернуте функцією, об’єкту dist3. Значення змінної dist1 не змінюється, а тільки використовується функцією add_dist().

 


<== попередня лекція | наступна лекція ==>
Конструктор копіювання за замовчуванням | Класи, об’єкти та пам’ять


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