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

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

Объекты в качестве аргументов

Рассмотрим, каким образом исполняется программа ENGLCON. Объекты dist1 и dist3 создаются при помощи конструктора по умолчанию (конструктора без аргу- ментов), а объект dist2 — при помощи конструктора, принимающего два аргумен- та, значения которых инициализируют поля объекта dist2. Значения для инициа- лизации объекта dist1 вводятся пользователем при помощи метода getdist(). Теперь мы хотим сложить значения dist1 и dist2 и присвоить результат объ- екту dist3. Это делается с помощью вызова функции

dist3.add_dist(dist1, dist2);

Величины, которые мы хотим сложить, передаются в качестве аргументов методу add_dist(). Синтаксис передачи объектов в функцию такой же, как и для переменных стандартных типов: на месте аргумента указывается имя объекта. Поскольку add_dist() является методом класса Distance, он имеет доступ к любым полям любого объекта класса Distance, используя операцию точки (.), например

dist1.inches и dist2.feet.

Если внимательно изучить функцию add_dist(), то мы увидим несколько важ- ных деталей, касающихся методов класса. Методу класса всегда предоставлен доступ к полям объекта, для которого он вызван: объект связан с методом опе- рацией точки (.). Однако на самом деле методу класса доступны и другие объ- екты. Если задаться вопросом, к каким объектам имеет доступ метод add_dist(), то, взглянув на вызов

dist3.add_dist(dist1, dist2);

можно заметить, что, кроме объекта dist3, из которого был вызван метод add_ dist(), он имеет доступ также и к объектам dist1 и dist2, поскольку они выступа- ют в качестве его аргументов. Можно рассматривать объект dist3 как псевдоар- гумент функции add_dist(); формально он не является аргументом, но функция имеет доступ к его полям. Смысл приведенного вызова можно сформулировать так: «выполнить метод add_dist() объекта dist3». Когда внутри функции проис- ходит обращение к полям inches и feet, это означает, что на самом деле обраще- ние происходит к полям dist3.inches и dist3.feet.

Обратите внимание на то, что функция не возвращает значения. Типом воз- вращаемого значения для функции add_dist() является void. Результат автомати- чески присваивается объекту dist3. На рис. 6.6 приведена иллюстрация сложения значений dist1 и dist2 с сохранением результата в переменной dist3.

Подводя итог вышесказанному, мы можем утверждать, что каждый вызов метода класса обязательно связан с конкретным объектом этого класса (ис- ключением является вызов статической функции, как мы увидим позже). Метод может прямо обращаться по имени (feet и inches в данном примере) к любым, открытым и закрытым, членам этого объекта. Кроме того, метод имеет непря- мой (через операцию точки, например dist1.inches и dist2.feet) доступ к членам других объектов своего класса; последние выступают в качестве аргументов метода.

dist3

Рис. 6.6. Результат

 

15