Cтраница 2
Часто перегруженные функции operator объявляются как дружественные функции класса. Это позволяет им иметь доступ к закрытым элементам класса. [16]
![]() |
Проверка состояния потока. [17] |
Перегруженные функции-операции объявлены в классе PhoneNumber как дружественные функции. Эти функции должны быть дружественными, чтобы иметь доступ к закрытым элементам класса. [18]
Также можно перегрузить унарный оператор, используя дружественную функцию, которая не входит в класс и имеет единственный параметр. [19]
Перегруженные функции operator объявляются в классе PhoneNumber как дружественные функции. Перегруженные операции ввода-вывода должны быть объявлены как дружественные, если им необходим доступ к каким-то элементам, помимо открытых. Друзья класса имеют доступ к закрытым элементам. [20]
![]() |
Друзья могут иметь доступ к закрытым элементам класса ( часть 1 из 2. [21] |
Программа на рис. 7.5 демонстрирует объявление и использование дружественной функции setX для установки закрытого элемента данных х класса count. Заметим, что объявление friend появляется первым ( по соглашению) в объявлении класса, даже раньше объявления закрытых функций-элементов. [22]
![]() |
Друзья класса могут обращаться к его закрытым элементам. [23] |
В программе на рис. 17.5 демонстрируется объявление и использование дружественной функции setX для установки закрытого элемента данных х класса Count. Обратите внимание, что объявление friend появляется ( по соглашению) первым в объявлении класса, даже до объявления открытых элементов-функций. [24]
Закрытые элементы класса могут быть доступны только для функций-элементов ( и дружественных функций) этого класса. Открытые элементы класса могут быть доступны для любых функций в программе. [25]
При перегрузке унарных операций предпочтительнее создавать фукции-операции, являющиеся элементами класса, вместо дружественных функций, не являющихся элементами. Дружественных функций и дружественных классов лучше избегать до тех пор, пока они не станут абсолютно необходимыми. Использование друзей нарушает инкапсуляцию класса. [26]
При перегрузке унарных операций предпочтительнее создавать фук-ции-операции, являющиеся элементами класса, вместо дружественных функций, не являющихся элементами. Дружественных функций и дружественных классов лучше избегать до тех пор, пока они не станут абсолютно необходимыми. Использование друзей нарушает инкапсуляцию класса. [27]
![]() |
Определяемые пользователем операции передачи и извлечения из потока. [28] |
Обратите внимание, что функции operator и operator объявляются в классе PhoneNumber в качестве дружественных функций, не являющихся элементами. Эти операции - не могут быть элементами класса, т.к. объекты класса PhoneNumber всегда появляются в операции в качестве правого операнда; операнд класса должен стоять в левой части, чтобы можно было перегружать операцию как функцию-элемент. [29]
Понятия типа доступа - private, protected и public - не имеют смысла для объявлений дружественных функций и классов, поэтому эти объявления могут размещаться в любом месте определения класса. [30]