В програмі 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().