Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/studb20/public_html/index.php on line 4
 Ссылки на члены класса - ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн - Studbook

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

Ссылки на члены класса

В программе ENGLPTR затем создается другой объект типа Distance с использова- нием операции new, которая возвращает указатель на него, именуемый distptr.

Возникает вопрос: как мы ссылаемся на методы класса из объекта, на кото- рый указывает distptr? Вы можете догадаться, что в этом случае мы можем ис- пользовать точку (.), операцию доступа к членам класса:

distptr.getdist ( ); // так нельзя: distptr не просто переменная

но это не будет работать. Операция точки требует, чтобы идентификатор слева был переменной. Так как distptr — указатель на переменную, то в этом случае применяется другой синтаксис. Это другой случай использования операции ра- зыменования (операции получения содержимого переменной, на которую указы- вает указатель):

(*distptr).getdist ( ); // так можно: разыменование указателя это переменная       

Однако это немного неуклюже из-за скобок (скобки необходимы, так как опе- рация точки (.) имеет больший приоритет, чем операция разыменования (*)). Эквивалентный, но более краткий способ записи предоставляется операцией доступа к членам класса, он состоит из дефиса и знака больше чем:

distptr->getdist ( ); // лучший вариант

Как вы могли увидеть в примере ENGLPTR, операция -> работает с указателя- ми на объекты так же, как и операция точки работает с объектами. Рассмотрим результат работы программы:

Введите футы: 10 Введите дюймы: 6.25 10'-6.25"

Введите футы: 6 Введите дюймы: 4.75 6'-4.75"

 

29