Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.62
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
#1

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

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

Долго гуглил, но что-то так и не понял. Почему слева от знака = может использоваться только функция, возвращающая ссылку?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 21:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возврат значения по ссылке (C++):

Как происходит возврат значения по ссылке? - C++
Добрый вечер, распишите пожалуйста детально про то, как происходит возврат значения по ссылке. Можно вот на этом примере: alpha&...

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

Возврат по ссылке - C++
Приветствую всех! Есть пример из книги Р. Лафоре "Объекто-ориентированное программирование в C++": #include <iostream> using...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
01.06.2011, 22:33 #2
Это о чем речь?)) Пример?
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
01.06.2011, 22:35 #3
погугли на темы lvalue rvalue.
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 22:38 #4
f() = 1;
Так что ли? Советую не извращаться таким способом.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
01.06.2011, 22:47 #5
это не извращения, это стандартный способ для записи выражений типа
C++
1
2
i=j=k=10;
cout << i << k << l << '\n';
без возврата по ссылке эти операции были бы невыполнимы
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 22:51 #6
OstapBender, речь шла о знаке =
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
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, который затем их возвратит. Для получения лучшего результата используйте
в этих функциях возврат по ссылке, чтобы они могли быть использованы
с левой стороны знака «равно» для изменения части существующей строки.

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

int &a()
{}
...
a()=3;
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
01.06.2011, 23:12 #12
slice,
C++
1
2
vector<int> n(1);
n[0] = 0;
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 23:19 #13
gooseim
Я же ясно написал, что запись f()=1 я считаю извращением. С какой целью ты приводишь мне другие примеры (припася, скорее всего, в кармане тезис "Оператор - это тоже функция"), мне не понятно.
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
01.06.2011, 23:24 #14
slice, ок
C++
1
2
vector<int> n(1);
n.at(0) = 1;
В некоторых компиляторах нет operator[] для вектора. Как тогда? Вообще не обращаться по индексу, считая это извращением?
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 23:32 #15
gooseim, да, этот код ужасен, нужно срочно переписывать такие компиляторы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 23:32
Привет! Вот еще темы с ответами:

Возврат значения С++ - C++
Hi people! Вот такое задание: 1) Реализовать заданную динамическую структуру данных, с которой можно работать через перегруженные...

Возврат значения из operator= - C++
Товарищи идет ли разрушение пир такой вот штуке, вызывается ли тут деструктор? Тексты надо переписывать в сообщение!

Возврат значения функции - C++
Что такое возврат значения функции? я уже всю голову изломал, что и куда возвращается? в гугле нашёл мол возвращается результат (куда? в...

Возврат значения из функции - C++
Добрый вечер. Вопрос следующий , как возвратить из функции create последнее значение ЛС , чтоб в дальнейшем использовать в main. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.06.2011, 23:32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru