0xtommy
|
||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||
функция друг, перегрузка <<20.07.2013, 09:56. Просмотров 1712. Ответов 26
Метки нет Все метки)
(
Доброго времени суток, Господа!
Имеется следующий код:
Может вопрос чисто академический)), но мне непонятно как происходит вызов перегруженного оператора в выражении:
|
|
20.07.2013, 09:56 | |
Перегрузка операций: friend-функция или функция-член класса функция - друг Функция друг |
|
20.07.2013, 10:32 | 2 | ||||||||||||||||||||
Когда встречается выражение типа
0
|
20.07.2013, 15:03 | 3 |
очень похожая ситуация была здесь: error LNK2001: unresolved external symbol
0
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
20.07.2013, 15:24 | 6 | |||||
Если сделать методом класса, то да:
0
|
Don't worry, be happy
|
||||||
20.07.2013, 15:26 | 7 | |||||
Можно еще поменять местами аргументы:
0
|
20.07.2013, 15:29 | 8 | ||||||||||
А так?
Я понимаю, что перегрузить оператор << можно так, что при
0
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||||||||||
20.07.2013, 15:35 | 9 | ||||||||||
Вот так:
С чего бы это? Добавлено через 57 секунд Ясно же видно, что возвращает:
А кто сказал, что так делать нужно? Я просто написал, что ТС правильно пшет в своём вопросе:
0
|
20.07.2013, 15:37 | 10 |
зачем тогда использовать перегрузку оператора вообще. С таким же успехом можно просто вывести на экран что то типа getHours и т.п.
тут уже мог и ошибиться, но факт того, что при связывании возврат объекта ostream не работает, остается неизменным.
0
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
20.07.2013, 15:41 | 11 | |||||
Чтобы выводить (в данном случае) объекты пользовательских типов.
Добавлено через 1 минуту Это о чём? Об этом?
0
|
20.07.2013, 15:43 | 13 |
Дабы это все не превратилось в holwar какой то, предлагаю закончить эту дискуссию. Мое виденье такое:
ТС правильно считает, что при перегрузке << как метода класса, объект этого класса должен быть l-value. ТС не правильно считает, что при перегрузке << как метода класса, операция << имеет свойство коммутативности. Из этого следует, что так сделать можно, но при совершенно другом подходе к перегрузке <<, а не просто сменой мест объектов двух разных классов.
0
|
20.07.2013, 15:48 | 15 | |||||
Я сказал
![]()
0
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
20.07.2013, 15:49 | 16 | |||||
Вот вам с возвратом объекта ostream:
0
|
Don't worry, be happy
|
|
20.07.2013, 15:58 | 18 |
Может стоит сначала разбить цепочку операторов нормально и посмотреть что и когда вызывается и почему так происходит, а не говорить что "не работает"? Всё работает так, как и положено, а не так как Вам бы хотелось!
0
|
20.07.2013, 16:01 | 19 | ||||||||||
В моем случае cout обычно используется в таком виде:
Я не утверждаю, что запись
0
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
20.07.2013, 16:19 | 20 |
Насчёт "синтаксиса" и "обычно" я согласен, поэтому и делают дружественными, чтобы синтаксис был проивычным. "Коммутативность" и "теряется смысл перегрузки" - не согласен. Коммутативность здесь вообще ни при чём, в дружественной функции тоже нельзя переставлять объект и cout. Вот Прата. Обратите внимание на слова: "следует использовать" и "можете перегрузить". То есть, никаких "нельзя", "теряется смысл" и пр.
0
|
20.07.2013, 16:19 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Функция друг принимает три аргумента Функция и перегрузка Функция-друг одно класса, член другого.
Перегрузка функции, шаблонная функция Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |