Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
1

Уточняющий вопрос: почему при перегрузке оператора [] необходимо возвращать ссылку?

16.05.2011, 16:17. Просмотров 898. Ответов 5
Метки нет (Все метки)

Сабж.
Ну, то есть есть класс, что-то такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
 
class arr
{
  public:
    explicit arr(int number) {
     array= new int [number];
     for (int i= 0; i< number;i++) array[i]= i* i;
    };
    //int operator[] (int i){return array[i];};
    int& operator[] (int i){return array[i];};
 
    ~arr(){delete array;}
 
  private:
    int *array;
};
 
int main () { 
 arr a(6);
 int r= a[2];
 cout<<r <<endl;
 getchar();
 return 0;
}
Есть перегруженный оператор [], он возвращает int, а у меня в книге написано, что надо возвращать ссылку на int

Я так подумал- мы ничё во втором случае не выиграем.
Итак, возвращаем ссылку. Размер тот же, что у int, да плюс ко всему её ещё и разыменовывать надо;
двойная работа. А int вернул и получил готовое значение.

А если компилятор трактует возврат ссылки как СРАЗУ возврат значения, опять ничё не выигрываем, что так возвратится int, что эдак. Правильно я думаю?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2011, 16:17
Ответы с готовыми решениями:

Почему при перегрузке оператора присваивания, возвращаемое значение не константно?
Почему при перегрузке оператора присваивания, возвращаемое значение - someClass...

Почему перегруженный оператор = должен возвращать ссылку на объект
Объясните доступно пожалуйста. Почему перегруженный оператор= должен...

Ошибка при перегрузке оператора >>
Приветствую. Есть 2 класса: enum Color { white = 1, red, green, blue, yellow...

Предупреждение при перегрузке оператора
Есть вот такой код для созданный для обучения #include &lt;iostream&gt; using...

Ошибка при перегрузке оператора +
Имеется класс, который представляет из себя строку и количество символов в ней....

5
oxotnik
1625 / 1098 / 75
Регистрация: 21.08.2008
Сообщений: 4,619
Записей в блоге: 1
16.05.2011, 16:20 2
возвращенный по ссылке элемент можно редактировать, при этом редактирование отразится в объекте класса, если возвращать по значению, то будет предоставлена только копия, т.е. будет только для чтения.
1
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
16.05.2011, 16:21 3
Цитата Сообщение от kravam Посмотреть сообщение
Я так подумал- мы ничё во втором случае не выиграем.
А вы попробуйте возвращать не ссылку и поставить a[2] в левую часть оператора присваевания.
1
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
16.05.2011, 18:39 4
Ничего необходимого тут нет. Только если нужно изменять. Для константной версии оператора ссылка нафиг не нужна
1
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
16.05.2011, 20:26 5
ForEveR, ну тут всё, опять же, зависит от того, что хранится в контейнере. Если контейнер шаблонный, лучше всё же возвращать ссылку, ибо при инстанцировании в качестве типа может быть указан другой класс, объекты которого могут быть довольно громоздкими, чтобы возвращать их по значению, а не по ссылке.
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
16.05.2011, 21:24 6
silent_1991, Ну да. Соглашусь.
0
16.05.2011, 21:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2011, 21:24

& при перегрузке оператора ввода
Скажите почему без &amp; не будет работать? ostream&amp; operator&lt;&lt;(ostream...

Ошибка при перегрузке оператора cin >>
#include &lt;iostream&gt; using namespace std; ...

Ошибка при перегрузке оператора вывода в файл
Добрый день, есть такой кусок кода: #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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