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

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

Войти
Регистрация
Восстановить пароль
 
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,304
#1

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

16.05.2011, 16:17. Просмотров 768. Ответов 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, что эдак. Правильно я думаю?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2011, 16:17     Уточняющий вопрос: почему при перегрузке оператора [] необходимо возвращать ссылку?
Посмотрите здесь:

Зачем нужен const при перегрузке оператора C++
C++ Ошибка в перегрузке оператора - при работе с массивами
C++ Почему перегруженный оператор = должен возвращать ссылку на объект
C++ Ошибка при перегрузке оператора, не знаю как исправить
& при перегрузке оператора ввода C++
Предупреждение при перегрузке оператора C++
От каких ошибок страхует Const при перегрузке оператора присваивания C++
C++ Преждевременный вызов деструктора при перегрузке оператора +
Ошибка при перегрузке оператора вывода в файл C++
Ошибка при перегрузке оператора cin >> C++
Ошибка при перегрузке оператора + C++
C++ Почему при перегрузке оператора присваивания, возвращаемое значение не константно?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
 Аватар для oxotnik
1586 / 1063 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
16.05.2011, 16:20     Уточняющий вопрос: почему при перегрузке оператора [] необходимо возвращать ссылку? #2
возвращенный по ссылке элемент можно редактировать, при этом редактирование отразится в объекте класса, если возвращать по значению, то будет предоставлена только копия, т.е. будет только для чтения.
asics
Freelance
Эксперт C++
 Аватар для asics
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.05.2011, 16:21     Уточняющий вопрос: почему при перегрузке оператора [] необходимо возвращать ссылку? #3
Цитата Сообщение от kravam Посмотреть сообщение
Я так подумал- мы ничё во втором случае не выиграем.
А вы попробуйте возвращать не ссылку и поставить a[2] в левую часть оператора присваевания.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.05.2011, 18:39     Уточняющий вопрос: почему при перегрузке оператора [] необходимо возвращать ссылку? #4
Ничего необходимого тут нет. Только если нужно изменять. Для константной версии оператора ссылка нафиг не нужна
silent_1991
Эксперт С++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,025
Завершенные тесты: 1
16.05.2011, 20:26     Уточняющий вопрос: почему при перегрузке оператора [] необходимо возвращать ссылку? #5
ForEveR, ну тут всё, опять же, зависит от того, что хранится в контейнере. Если контейнер шаблонный, лучше всё же возвращать ссылку, ибо при инстанцировании в качестве типа может быть указан другой класс, объекты которого могут быть довольно громоздкими, чтобы возвращать их по значению, а не по ссылке.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.05.2011, 21:24     Уточняющий вопрос: почему при перегрузке оператора [] необходимо возвращать ссылку? #6
silent_1991, Ну да. Соглашусь.
Yandex
Объявления
16.05.2011, 21:24     Уточняющий вопрос: почему при перегрузке оператора [] необходимо возвращать ссылку?
Ответ Создать тему
Опции темы

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