Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/23: Рейтинг темы: голосов - 23, средняя оценка - 4.87
141 / 110 / 30
Регистрация: 20.04.2011
Сообщений: 581
1

Возврат значения по ссылке

01.06.2011, 21:50. Показов 4425. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Долго гуглил, но что-то так и не понял. Почему слева от знака = может использоваться только функция, возвращающая ссылку?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2011, 21:50
Ответы с готовыми решениями:

Как происходит возврат значения по ссылке?
Добрый вечер, распишите пожалуйста детально про то, как происходит возврат значения по ссылке....

Возврат по ссылке
Приветствую всех! Есть пример из книги Р. Лафоре "Объекто-ориентированное программирование в...

Возврат по ссылке
Вычитал давно еще, что если возвращать статический обьект из метода и присвоить его констатной...

Наследование, возврат по ссылке..
Есть такое :wall:Я не могу понять, как реализовать :help: :wall:Подсказывать, как это можно...

18
94 / 94 / 14
Регистрация: 04.06.2010
Сообщений: 223
01.06.2011, 22:33 2
Это о чем речь?)) Пример?
0
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
01.06.2011, 22:35 3
погугли на темы lvalue rvalue.
0
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 22:38 4
f() = 1;
Так что ли? Советую не извращаться таким способом.
0
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
01.06.2011, 22:47 5
это не извращения, это стандартный способ для записи выражений типа
C++
1
2
i=j=k=10;
cout << i << k << l << '\n';
без возврата по ссылке эти операции были бы невыполнимы
0
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 22:51 6
OstapBender, речь шла о знаке =
0
141 / 110 / 30
Регистрация: 20.04.2011
Сообщений: 581
01.06.2011, 22:52  [ТС] 7
например, задание из Лафоре
В некоторых компьютерных языках, таких, как Visual Basic, есть опера-
ции, с помощью которых можно выделить часть строки и присвоить ее
другой строке. (В стандартном классе string предложены различные под-
ходы.) Используя наследование, добавьте такую возможность в класс
Pstring из упражнения 2. В новом производном классе Pstring2 разместите
три новых функции: left(), mid() и right().
C++
1
2
3
4
5
6
s2.1eft ( s1, n ) // в строку s2 помещаются n саных левых
// символов строки sl
s2.mid ( s1, s, n ) // в стэоку s2 понещаются n символов из строки
// начиная с сиивола номер s
s2.right ( s1, n ) // в строку s2 помещаются n самых правых
// символов строки s1
Вы можете использовать цикл for для копирования символ за символом
подходящих частей строки sl во временный объект класса Pstring2, который затем их возвратит. Для получения лучшего результата используйте
в этих функциях возврат по ссылке, чтобы они могли быть использованы
с левой стороны знака «равно» для изменения части существующей строки.

Еще раньше было упоминание этого для функции доступа к массиву (вместо []).
0
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
01.06.2011, 22:52 8
Потому что если возвращается значение (а не ссылка на значение) то возвращается только копия объекта, а не сам объект. Когда же ты возвращаешь ссылку то функция вернёт ссылку на твой объект, который ты уже можешь изменять (если ссылка не константная).
1
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
01.06.2011, 22:55 9
Цитата Сообщение от slice Посмотреть сообщение
OstapBender, речь шла о знаке =
ну, а мой пример c i=j=k=10; не демонстрирует это?
= - это и есть функция class& operator=()
0
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 23:04 10
Цитата Сообщение от OstapBender Посмотреть сообщение
а мой пример c i=j=k=10; не демонстрирует это?
Нет, не демонстрирует. Тут приоритет операций следующий: i=(j=(k=10)). И где же здесь присваивание тому, что вернула функция? А вот такое ((i=j)=k)=10 это извращение, и все граммотные програмисты запрещают делать такое присваивание, вовращая не простую а константную ссылку.
Что скажешь, умник?
0
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
01.06.2011, 23:09 11
Так у вас же функций нет, автор вероятно имел в виду

int &a()
{}
...
a()=3;
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
01.06.2011, 23:12 12
slice,
C++
1
2
vector<int> n(1);
n[0] = 0;
0
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 23:19 13
gooseim
Я же ясно написал, что запись f()=1 я считаю извращением. С какой целью ты приводишь мне другие примеры (припася, скорее всего, в кармане тезис "Оператор - это тоже функция"), мне не понятно.
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
01.06.2011, 23:24 14
slice, ок
C++
1
2
vector<int> n(1);
n.at(0) = 1;
В некоторых компиляторах нет operator[] для вектора. Как тогда? Вообще не обращаться по индексу, считая это извращением?
0
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 23:32 15
gooseim, да, этот код ужасен, нужно срочно переписывать такие компиляторы.
0
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
01.06.2011, 23:46 16
Цитата Сообщение от slice Посмотреть сообщение
Нет, не демонстрирует.
ну ок согласен, ошибся, в случае с = & используется для удобства

Цитата Сообщение от slice Посмотреть сообщение
припася, скорее всего, в кармане тезис "Оператор - это тоже функция"
и что? потому что так и есть
и arr[i]=0; хороший пример.
0
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 23:52 17
OstapBender, и чё?
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
01.06.2011, 23:55 18
OstapBender, имелся ввиду внешний вид, а не содержание.
Тут как говорится на вкус и цвет. По моему мнению функция для матрицы Element& get(X, Y) меньшее извращение, чем две функции Element get(X, Y) и set(X, Y, Element), и уж куда меньшее извращение, чем вспомогательные классы для записи [][].
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
02.06.2011, 10:52 19
gooseim, А по-моему мнению более удобно перегрузить оператор () (X, Y)... Хотя и get и get/set тоже неплохо. По крайней мере get будет константной возвращающей конст ссылку, а set неконстантной ничего не возвращающей. Что несколько более понятно. Функция должна выполнять только 1 вещь (что не всегда возможно впринципе).
0
02.06.2011, 10:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2011, 10:52
Помогаю со студенческими работами здесь

Возврат по константой ссылке
Всем добрый день! И снова я с глупыми вопросами, простите заранее :-const int&amp; mysum(int&amp; num,...

Возврат результата из функции через параметр по ссылке
Здравствуйте уважаемый форумчане! Подскажите, как вернуть результат работы функции по ссылке? Как...

Запутался и уже не понимаю как вообще может работать возврат объекта по ссылке
Здравствуйте, киберфорумчане. Сейчас читаю Г. Шилдта и в его книге рассказывается о побочных...

Повторный возврат рандомного значения ,без изменения значения
Добрый день. Пишу простую консольную игру Кости. Есть 4-е функции прорисовки костей (2-е на кости...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru