Главная->Інформатика та програмування->Содержание->Структурная переменная в качестве возвращаемого значения

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В 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()), как это было в предыдущих примерах. Функции программы могут располагаться в любом порядке. Единственным условием является появление прототипа каждой из функций до того, как производится первое обращение к данной функции.

 

17