141 / 110 / 30
Регистрация: 20.04.2011
Сообщений: 581
|
|
1 | |
Возврат значения по ссылке01.06.2011, 21:50. Показов 4425. Ответов 18
Метки нет (Все метки)
Долго гуглил, но что-то так и не понял. Почему слева от знака = может использоваться только функция, возвращающая ссылку?
0
|
01.06.2011, 21:50 | |
Ответы с готовыми решениями:
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 | |||||
это не извращения, это стандартный способ для записи выражений типа
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().
подходящих частей строки 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 |
ну, а мой пример c i=j=k=10; не демонстрирует это?
= - это и есть функция class& operator=()
0
|
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
|
|
01.06.2011, 23:04 | 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,
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, ок
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 |
ну ок согласен, ошибся, в случае с = & используется для удобства
и что? потому что так и есть и 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 | |
02.06.2011, 10:52 | |
Помогаю со студенческими работами здесь
19
Возврат по константой ссылке Возврат результата из функции через параметр по ссылке Запутался и уже не понимаю как вообще может работать возврат объекта по ссылке Повторный возврат рандомного значения ,без изменения значения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |