Дружественная функция - Большая Энциклопедия Нефти и Газа, статья, страница 4
Когда ты сделал что-то, чего до тебя не делал никто, люди не в состоянии оценить, насколько трудно это было. Законы Мерфи (еще...)

Дружественная функция

Cтраница 4


Можно объявить любой класс или функцию, которые будут дружественны по отношению к вашему классу шаблона. В этом случае каждый экземпляр класса будет обращаться с другом так, как будто объявление класса-друга было сделано в этом конкретном экземпляре. В листинге 19.3 в определении шаблона класса Array добавлена тривиальная дружественная функция lntrude (), а в управляющей программе делается вызов этой функции.  [46]

Программа на рис. 8.4 демонстрирует класс Array и его перегруженные операции. Сначала мы проследим программу драйвер в main. Затем рассмотрим определение класса, каждую функцию-элемент класса и определения дружественных функций.  [47]

Программа, приведенная на рис. 18.4, демонстрирует класс Array и его перегруженные операции. Затем мы рассмотрим определение класса, определения его функций-элементов и определения дружественных функций. Программа создает два объекта класса Array - integers. Статический элемент данных arrayCount класса Array содержит число объектов Array, созданных во время выполнения программы. Статическая функция-элемент get ArrayCount возвращает это значение. Функция-элемент getSize возвращает размер массива integers. Программа выводит размер массива integers. Затем выводится размер массива integers2 и выводится сам массив с помощью перегруженной операции передачи в поток.  [48]

Перегруженная операция должна иметь в качестве левого операнда тип ostream & ( такой, как cout в выражении cout classObject), так что она должна быть функцией, не являющейся элементом класса. Аналогично операция должна иметь в качестве левого операнда тип istream & ( такой, как cin в выражении cin classObject) и не являться функцией-элементом. Кроме того, каждая из этих перегружающих операцию функций требует доступа к закрытым элементам данных класса объектов, который должен выводиться или вводиться. Так что эти перегружающие операцию функции делаются обычно дружественными функциями класса по причинам, связанным с эффективностью.  [49]

50 Объявление класса Time ( часть 1 из 6. [50]

В программе на рис. 16.10 производится расширение нашего класса Time путем включения get - и set - функций для закрытых элементов данных hour, minute и second. Set-функции строго контролируют установку элементов данных. Каждая get - функция просто возвращает значение соответствующего элемента данных. Сначала программа использует set - функции для присваивания закрытым элементам данных объекта t класса Time допустимых значений, затем она использует get - функции для извлечения значений для их вывода. После этого set - функции пытаются присвоить элементам hour и second недопустимые значения, а элементу minute допустимое значение, после чего get - функции возвращают значения для вывода. Выходные данные программы подтверждают, что недопустимые значения приводят к присваиванию элементам данных нулевых значений. Функция incrementMinutes не является элементом класса и использует для увеличения элементов данных элементы-функции get... Этот метод работает, но приводит к снижению производительности, связанному с неоднократными вызовами функций. В следующей главе мы обсудим понятие дружественных функций в качестве одного из способов устранения подобных издержек.  [51]

Программа на рис. 6.10 расширяет наш класс Time так, чтобы он включал функции чтения и записи закрытых данных-элементов hour, minute и second. Функции записи жестко управляют установкой данных-элементов. Каждая функция чтения просто возвращает соответствующее значение данных-элементов. Программа сначала использует функции записи, чтобы задать правильные значения закрытым данным-элементам объекта t класса Time, затем использует функцию чтения, чтобы вывести эти значения на экран. Далее функции записи пытаются задать элементам hour и second неправильные значения, а элементу minute - правильное, и затем функции чтения направляют эти значения на экран. Результат подтверждает, что неправильные значения вызывают установку данных-элементов в нулевое состояние. Функция incrementMinutes не является элементом класса; поэтому она использует функции-элементы записи и чтения для соответствующего увеличения элемента minute. Это функционирует правильно, но снижает производительность из-за многократных вызовов функций. В следующей главе мы обсудим запись дружественных функций как средства устранения этого недостатка.  [52]



Страницы:      1    2    3    4