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

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

Восстановить пароль Регистрация
 
Nishen
 Аватар для Nishen
171 / 77 / 28
Регистрация: 26.02.2015
Сообщений: 461
15.07.2015, 12:08     Возврат по ссылке #1
Приветствую всех!
Есть пример из книги Р. Лафоре "Объекто-ориентированное программирование в 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++
Возврат значения С++ C++
C++ Возврат коретки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hoggy
5225 / 2116 / 403
Регистрация: 15.11.2014
Сообщений: 4,800
Завершенные тесты: 1
15.07.2015, 12:18     Возврат по ссылке #2
Цитата Сообщение от Nishen Посмотреть сообщение
Мы из метода класса возвращаем ссылку на ячейку массива, правильно?
Ага.

C++
1
2
3
// temp инициализируется значением той самой ячейки, 
// ссылку на которую вы вернули из метода
int temp = sa1[i];
Цитата Сообщение от Nishen Посмотреть сообщение
Почему в переменную temp записывается значение, лежащее в определенной ячейке массива, а не ее адрес?
потому что возвращая ссылку на ячейку,
вы возвращаете значение этой ячейки (значение элемента массива), а не её адрес.
Nishen
 Аватар для Nishen
171 / 77 / 28
Регистрация: 26.02.2015
Сообщений: 461
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
 Аватар для Nishen
171 / 77 / 28
Регистрация: 26.02.2015
Сообщений: 461
15.07.2015, 12:33  [ТС]     Возврат по ссылке #5
kozlik_kozlik, вот, я хотел спросить, используется ли тут "неявное" разыменовывание. Спасибо и тебе!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
15.07.2015, 12:47     Возврат по ссылке #6
, вот, я хотел спросить, используется ли тут "неявное" разыменовывание.
С точки зрения реализации - возможно (даже скорее всего - да).
С точки зрения языка - нет. Ссылки - отдельный механизм.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2015, 19:30     Возврат по ссылке
Еще ссылки по теме:

возврат C++
Возврат ссылки C++
Как происходит возврат значения по ссылке? C++

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

Или воспользуйтесь поиском по форуму:
hoggy
5225 / 2116 / 403
Регистрация: 15.11.2014
Сообщений: 4,800
Завершенные тесты: 1
15.07.2015, 19:30     Возврат по ссылке #7
Цитата Сообщение от kozlik_kozlik Посмотреть сообщение
Ссылка - указатель, который автоматически разыменовывается при использовании.
ссылка - не указатель.
тип данных имеет ряд принципиальных отличий в дизайне использования.
Yandex
Объявления
15.07.2015, 19:30     Возврат по ссылке
Ответ Создать тему
Опции темы

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