ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 6) онлайн

Аргументы и объекты

В примере ENGLCON два объекта были переданы в качестве аргументов в функ- цию add_dist(), а результат был сохранен в объекте dist3, методом которого и яв- лялась вызванная функция add_dist(). В программе ENGLRET в качестве аргумента в функцию add_dist() передается лишь один аргумент: объект dist2, dist2 складыва- ется с объектом dist1, к которому относится вызываемый метод add_dist(), резуль- тат возвращается в функцию main()n присваивается объекту dist3:

dist3 = dist1. add__dist(dist2);

Действия этого оператора аналогичны действиям соответствующего оператора программы ENGLCON, однако форма записи первого более естественна, поскольку использует операцию присваивания самым обычным образом. В главе 8 «Пере- грузка операций» мы увидим, как с помощью арифметической операции + мож- но добиться еще более простой формы записи этих же действий:

dist3 = dist1 + dist2;

Функция add_dist() из примера ENGLRET выглядит так:

// сложение данного объекта с 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;

}

 

Сравнив эту функцию с одноименной функцией программы ENGLCON, вы можете заметить несколько тонкостей, отличающих одну функцию от другой. В функции из программы ENGLRET создается временный объект класса Distance. Этот объект хранит значение вычисленной суммы до тех пор, пока она не будет возвращена вызывающей программе. Сумма вычисляется путем сложения двух объектов класса Distance. Первый из объектов — dist1, по отношению к которо- му функция add_dist() является методом; второй объект — dist2, переданный в функцию в качестве аргумента. Обращение к его полям из функции выглядит как d2.feet и d2.inches. Результат сложения хранится в объекте temp и обраще- ние к его полям выглядит как temp.feet и temp.inches. Значение объекта temp возвращается в вызывающую программу с помощью оператора

return temp;

Вызывающая программа main() присваивает значение, возвращенное функ- цией, объекту dist3. Обратите внимание на то, что значение переменной dist1 не изменяется, а всего лишь используется функцией add_dist(). На рис. 6.7 показано, каким образом значение объекта возвращается в вызывающую программу.

temp

Рис. 6.7. Результат, возвращаемый из временного объекта

 

18