ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 6) онлайн
Объекты, возвращаемые функцией
В примере ENGLCON мы видели, что объекты можно передавать в функцию в каче- стве аргументов. Теперь мы рассмотрим, каким образом функция может возвра- тить объект в вызывающую программу. Мы модифицируем пример ENGLCON и в результате получим программу ENGLRET:
// englret.cpp
// возвращение функцией значения типа Distance
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////
class Distance // длина в английской системе
{
private:
int feet;
float inches;
public: // конструктор без аргументов
Distance() : feet(0), inches(0.0)
{ } // конструктор с двумя аргументами
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); // сложение
};
//--------------------------------------------------------
// сложение данного объекта с d2, возврат суммы
Distance Distance::add_dist(Distance d2)
{
Distance temp; // временная переменная
temp.inches = inches + d2.inches; // сложение дюймов
if(temp.inches >= 12.0) // если сумма больше 12.0,
{ // то уменьшаем ее на
temp.inches -= 12.0; // 12.0 и увеличиваем
temp.feet = 1; // число футов на 1
}
temp.feet += feet + d2.feet; // сложение футов
return temp;
}
//////////////////////////////////////////////////////////
int main()
{
Distance dist1, dist3; // две длины
Distance dist2(11, 6.25); // определение и инициализация dist2
dist1.getdist(); // ввод dist1 пользователем
dist3 = dist1.add_dist(dist2); // dist3 = dist1 + dist2
// вывод всех длин
cout << "\ndist1 = "; dist1.showdist();
cout << "\ndist2 = "; dist2.showdist();
cout << "\ndist3 = "; dist3.showdist();
cout << endl;
return 0;
}
Программа ENGLRET очень похожа на программу ENGLCON, однако различия между ними указывают на важные аспекты работы функций с объектами.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32