|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
||||||
friend function C++ and operator ::12.01.2020, 20:52. Показов 4599. Ответов 25
Метки нет (Все метки)
привет
подскажите пожалуйста в чем ошибка? где не понимаю? допустим есть класс
0
|
||||||
| 12.01.2020, 20:52 | |
|
Ответы с готовыми решениями:
25
Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend Friend function |
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||
| 12.01.2020, 21:02 | |||||||
|
Добавлено через 1 минуту
1
|
|||||||
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
||||||
| 12.01.2020, 22:06 [ТС] | ||||||
|
а если не принадлежит, то и принадлежность описывать не надо. я понял так.
а в каких случаях надо? когда надо делать так? \
Добавлено через 6 минут то есть , если одну и туже функцию будут использовать несколько классов, то тогда я создаю в классе ее прототип, а после объявляю принадлежность классу? но что-то не клеится. есть же виртуальные функции. Добавлено через 3 минуты и вообще func() в данном случае же не метод а функция. правильно? Добавлено через 55 секунд или метод?
0
|
||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 12.01.2020, 22:15 | |
|
pcmax, ничего не понял. Сформулируйте вопрос.
В вашем коде func - это функция-член класса (в простонародье - метод), при определении ее снаружи класса нужно указывать ее полное имя, через ::. Только вот не понятно как это относится к теме friend function.
1
|
|
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
|
| 12.01.2020, 23:00 [ТС] | |
|
я пытаюсь понять можно ли выносить friend функции за тело класса.
я пытаюсь понять зачем вообще мы вообще выносим функции или методы за класс.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 12.01.2020, 23:05 | |||
Сообщение было отмечено pcmax как решение
РешениеДля обеспечения раздельной компиляции. Для декомпозиции кода.
1
|
|||
|
129 / 1 / 1
Регистрация: 16.12.2019
Сообщений: 33
|
|
| 12.01.2020, 23:18 | |
Сообщение было отмечено pcmax как решение
Решение
Предыдущий ответ лучше моего, но если просто, как, например, я себе его по свойству определил, то "Если нужно тебе у другого класса получить доступ к защищенным полям, то значит нужна дружественная функция". Обрати внимание, что ты передаешь friend функции ссылку на класс, который ты уже знаешь, что пригодится другому классу получить доступ к тому, что он в "сейфе" прячет. Т.е., грубо говоря, пример, у тебя есть секрет, милиция его сказать заставит, а левый кто-то нет (очень плохой пример, но что в голову пришло...) Это ради чего, очень грубо ес-но, используется это. Но, опять же выше ответы лучше.
Добавлено через 3 минуты Выносят хотя бы потому что тогда ты не указываешь область видимости этой функции, она при описании вне класса в глобальной области видимости. Пока в классе - в его. Поэтому вне класса по-идее. Так как у тебя же больше 2-х классов с одинаковыми дружественными функциями моут быть. (Это я так понимаю, если не прав исправьте пожалуйста).
1
|
|
|
Модератор
|
||||||
| 13.01.2020, 08:19 | ||||||
Сообщение было отмечено pcmax как решение
Решение
friend'ами могут быть и члены другого класса.
1
|
||||||
|
Вездепух
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,224
|
|||||||||||||
| 13.01.2020, 10:29 | |||||||||||||
Сообщение было отмечено pcmax как решение
РешениеПри этом важной деталью является то, что friend-функция объявленная (и определенная) только внутри класса не видна обычному поиску имен, а видна только ADL. А friend-функция определенная снаружи видна всем
.cpp файл будут компилироваться один раз (а не множество раз при каждом включении заголовочного файла с вашим классом).Также, класс, в который запихнули определения громоздких методов, практически необозрим и нечитаем. Также, вынесение методов в .cpp файл скрывает из реализацию.Также, если у вас есть два класса, связанные циклической зависимостью в своих методах, то хотите-не хотите, но выносить методы хотя бы одного класса все равно придется
4
|
|||||||||||||
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
|||||||
| 13.01.2020, 21:04 [ТС] | |||||||
|
вот именно. почему?
если нет то что именно неправильно?
0
|
|||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 13.01.2020, 21:08 | |
|
1
|
|
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
|
| 13.01.2020, 21:14 [ТС] | |
|
тогда давайте пожалуйста разберемся.
пишут что методы также можно описывать вне класса. тогда такой метод уже не метод? или что? Добавлено через 1 минуту то есть такая фукнция уже не является функцией-членом класса?
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||||||
| 13.01.2020, 21:15 | |||||||||||
|
pcmax,
1
|
|||||||||||
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
||||||
| 13.01.2020, 21:16 [ТС] | ||||||
0
|
||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 13.01.2020, 21:23 | |
|
1
|
|
|
Вездепух
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,224
|
|
| 13.01.2020, 21:24 | |
|
1
|
|
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
|
| 13.01.2020, 21:26 [ТС] | |
|
спасибо ребята умеете вы объяснить.
где правда?
1
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 13.01.2020, 21:29 | |
|
0
|
|
|
129 / 1 / 1
Регистрация: 16.12.2019
Сообщений: 33
|
|
| 13.01.2020, 21:36 | |
|
Если функция - метод, то у метода, если описываешь его реализацию, а не прототип вне класса будет указана область видимости класса, которому принадлежит метод.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||||||
| 13.01.2020, 21:42 | ||||||
|
pcmax,
1
|
||||||
| 13.01.2020, 21:42 | |
|
Помогаю со студенческими работами здесь
20
Friend Function friend function friend function
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|