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

Вызов методов класса

Следующая пара операторов осуществляет вызов метода setdata();

s1.setdata(1066); s2.setdata(1776);

Эти операторы выглядят не так, как обычный вызов функции. Почему имена объектов s1 и s2 связаны с именами функций операцией точки (.)? Такой стран- ный синтаксис объясняется тем, что вызов применим к методу конкретного объ- екта. Поскольку setdata() является методом класса smallobj, его вызов должен быть связан с объектом этого класса. Например, оператор

setdata (1066);

сам по себе не имеет смысла, потому что метод всегда производит действия с конкретным объектом, а не с классом в целом. Попытка доступа к классу по смыслу сходна попытке сесть за руль чертежа автомобиля. Кроме бессмыс- ленности такого действия, компилятор расценил бы это как ошибку. Таким образом, доступ к методам класса возможен только через конкретный объект этого класса.

Для того чтобы получить доступ к методу класса, необходимо использовать операцию точки (.), связывающую метод с именем объекта. Синтаксически это напоминает доступ к полям структуры, но скобки позади имени метода говорят о том, что мы совершаем вызов функции, а не используем значение переменной (операцию точки называют операцией доступа к члену класса).

Оператор s1.setdata(1066);

вызывает метод setdata() объекта s1. Метод присваивает полю somedata объекта s1 значение, равное 1066. Вызов

s2.setdata(1776);

подобным же образом присваивает полю somedata объекта s2 значение, равное 1776. Теперь мы имеем два объекта с различными значениями поля somedata, как показано на рис. 6.4.

Рис. 6.4. Два объекта класса smallobj

Аналогично, два вызова функции showdata() отобразят на экране значения полей соответствующих объектов:

s1.showdata(); s2.showdata();

Сообщения

В некоторых объектно-ориентированных языках программирования вызовы ме- тодов объектов называют сообщениями. Так, например, вызов

s1.showdata();

можно рассматривать как посылку сообщения объекту s1 с указанием вывести на экран свои данные. Термин сообщение не входит в число формальных терми- нов языка C++, однако его полезно держать в голове в процессе дальнейшего обсуждения. Представление вызова методов в виде сообщений подчеркивает не- зависимость объектов как самостоятельных единиц, взаимодействие с которыми осуществляется путем обращения к их методам. Если обратиться к аналогии

со структурой компании, приведенной в главе I, то вызов метода будет похож на письмо к секретарю отдела продаж с запросом статистики о рынке компании в каком-либо регионе.

 

7