ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 5) онлайн
Структурная переменная в качестве возвращаемого значения
Мы видели, что структурные переменные можно использовать в качестве аргу- ментов функций. Оказывается, что такие переменные могут выступать и в каче- стве значения, возвращаемого функцией. Следующий пример, RETSTRC, включает в себя функцию, складывающую два значения типа Distance и возвращающую результат этого же типа:
// retstrc.cpp
// демонстрирует возвращение функцией структурной переменной
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////
struct Distance // длина в английской системе
{
int feet;
float inches;
};
//////////////////////////////////////////////////////////
Distance addengl( Distance, Distance ); // прототипы
void engldisp(Distance);
int main()
{
Distance d1, d2, d3; // три структурные переменные
// ввод значения d1
cout << "\nВведите число футов: "; cin >> d1.feet;
cout << "Введите число дюймов: "; cin >> d1.inches;
// ввод значения d2
cout << "\nВведите число футов: "; cin >> d2.feet;
cout << "Введите число дюймов: "; cin >> d2.inches;
d3 = addengl(d1, d2); // d3 равно сумме d1 и d2
cout << endl;
engldisp(d1); cout << " + "; // вывод всех длин
engldisp(d2); cout << " = ";
engldisp(d3); cout << endl;
return 0;
}
//--------------------------------------------------------
// функция addengl()
// складывает два значения типа Distance и возвращает сумму
Distance addengl(Distance dd1,Distance dd2 )
{
Distance dd3; // переменная для хранения будущей суммы
dd3.inches = dd1.inches + dd2.inches; // сложение дюймов
dd3.feet = 0; // с заемом;
if(dd3.inches >= 12.0) // если число дюймов больше 12.0,
{ // то уменьшаем число дюймов
dd3.inches -= 12.0; // на 12.0 и увеличиваем
dd3.feet++; // число футов на 1
}
dd3.feet += dd1.feet + dd2.feet; // сложение футов
return dd3; // возврат значения
}
//--------------------------------------------------------
// функция engldisp()
// отображает поля структурной переменной Distance
void engldisp(Distance dd)
{
cout << dd.feet << "\'-" << dd.inches << "\"";
}
Программа просит пользователя ввести две длины в виде числа футов и дюй- мов, затем складывает введенные значения путем вызова функции addengl() и вы- водит результат на экран с помощью функции engldisp(), взятой из программы ENGLDISP. Результат работы программы RETSTRC выглядит следующим образом:
Введите число футов: 4 Введите число дюймов: 5.5
Введите число футов: 5 Введите число дюймов: 6.5
4' -5.5" + 5' -6.5" = 10'-0"
Функция main() складывает две длины, хранящиеся в переменных типа Distance, с помощью вызова функции addengl();
d3 = addengl(d1, d2);
Функция addengl() возвращает сумму аргументов d1 и d2 в виде значения типа Distance, которое в функции main() присваивается структурной переменной d3.
Кроме структурного значения, возвращаемого функцией, в данной програм- ме используются две функции, а не одна (если не считать функцию main()), как это было в предыдущих примерах. Функции программы могут располагаться в любом порядке. Единственным условием является появление прототипа каждой из функций до того, как производится первое обращение к данной функции.
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 33 34 35 36 37 38 39
