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

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

Войти
Регистрация
Восстановить пароль
 
Nishen
342 / 180 / 68
Регистрация: 26.02.2015
Сообщений: 892
#1

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

15.07.2015, 12:08. Просмотров 240. Ответов 6
Метки нет (Все метки)

Приветствую всех!
Есть пример из книги Р. Лафоре "Объекто-ориентированное программирование в C++":
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
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
using namespace std;
#include <process.h>
 
const int LIMIT = 100;
//---------------------------------------------------------------------------//
//Определение класса Safearray
//---------------------------------------------------------------------------//
class Safearray{
    private:
        int arr[LIMIT];
    public:
        int& operator [](int n){
            if(n < 0 || n >= LIMIT){
                cout << "\nОшибочный индекс!" << endl;
                system("PAUSE"); exit(1);
            }
            return arr[n];
        }
};
//-----------------------------------------------------------------------------
int main(){
    setlocale(LC_ALL, "Russian");
 
    Safearray sa1;
 
    for(int i = 0; i < LIMIT; i++)
        sa1[i] = i * 10;
 
    for(int i = 0; i < LIMIT; i++){
        int temp = sa1[i];
        cout << "Элемен " << i << " равен " << temp << endl;
    }
 
    system("PAUSE");
    return 0;
}
Поясните, пожалуйста, сей пример? Мы из метода класса возвращаем ссылку на ячейку массива, правильно? Тогда как понимать эту строчку:
C++
1
int temp = sa1[i];
Почему в переменную temp записывается значение, лежащее в определенной ячейке массива, а не ее адрес?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2015, 12:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возврат по ссылке (C++):

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

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

Возврат значения по ссылке - C++
Долго гуглил, но что-то так и не понял. Почему слева от знака = может использоваться только функция, возвращающая ссылку?

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

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

возврат - C++
пример: функция была выполнена с ошибкой, как сделать возврат на предыдущее функцию?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
hoggy
6531 / 2711 / 468
Регистрация: 15.11.2014
Сообщений: 5,986
Завершенные тесты: 1
15.07.2015, 12:18 #2
Цитата Сообщение от Nishen Посмотреть сообщение
Мы из метода класса возвращаем ссылку на ячейку массива, правильно?
Ага.

C++
1
2
3
// temp инициализируется значением той самой ячейки, 
// ссылку на которую вы вернули из метода
int temp = sa1[i];
Цитата Сообщение от Nishen Посмотреть сообщение
Почему в переменную temp записывается значение, лежащее в определенной ячейке массива, а не ее адрес?
потому что возвращая ссылку на ячейку,
вы возвращаете значение этой ячейки (значение элемента массива), а не её адрес.
Nishen
342 / 180 / 68
Регистрация: 26.02.2015
Сообщений: 892
15.07.2015, 12:30  [ТС] #3
hoggy, спасибо, я разобрался! Перепутал возврат по ссылке с операцией взятия адреса.
kozlik_kozlik
7 / 11 / 0
Регистрация: 01.08.2012
Сообщений: 99
15.07.2015, 12:32 #4
Ссылка - указатель, который автоматически разыменовывается при использовании. Поэтому можно ею пользоваться как именем для ячейки: захотели - поставили в арифметическое выражение, захотели - записали туда что-нибудь новое...

C++ (Qt)
1
Почему в переменную temp записывается значение, лежащее в определенной ячейке массива, а не ее адрес?
Всё правильно, то, что справа от знака равенства, разыменовывается без дополнительных действий с вашей стороны.
Nishen
342 / 180 / 68
Регистрация: 26.02.2015
Сообщений: 892
15.07.2015, 12:33  [ТС] #5
kozlik_kozlik, вот, я хотел спросить, используется ли тут "неявное" разыменовывание. Спасибо и тебе!
Croessmah
Модератор
Эксперт CЭксперт С++
13132 / 7395 / 828
Регистрация: 27.09.2012
Сообщений: 18,217
Записей в блоге: 3
Завершенные тесты: 1
15.07.2015, 12:47 #6
, вот, я хотел спросить, используется ли тут "неявное" разыменовывание.
С точки зрения реализации - возможно (даже скорее всего - да).
С точки зрения языка - нет. Ссылки - отдельный механизм.
hoggy
6531 / 2711 / 468
Регистрация: 15.11.2014
Сообщений: 5,986
Завершенные тесты: 1
15.07.2015, 19:30 #7
Цитата Сообщение от kozlik_kozlik Посмотреть сообщение
Ссылка - указатель, который автоматически разыменовывается при использовании.
ссылка - не указатель.
тип данных имеет ряд принципиальных отличий в дизайне использования.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2015, 19:30
Привет! Вот еще темы с ответами:

Возврат ссылки - C++
int &amp; function(int); Понятно для чего передают аргументы в функцию как указатели или ссылки.Но зачем функция возвращает ссылку? Чтобы...

Возврат ссылок - C++
День добрый, Буду благодарен если разъясните следующий вопрос: Есть некий класс. Card. Для него есть перегруженный оператор...

Возврат почему же?! - C++
Народ помогите у меня функция почему то возвращает значение хочё сделать чек бокс для своеё игры void DrawMenuBut( char *txt,...

возврат по ссылкам - C++
На защиту лаб.работы препод требует рассказать о возврате по ссылкам. Зачем они? Как они описываются, какой у них плюс?


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

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

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