Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 20
1

зачем нужен "&" ?

25.04.2010, 12:37. Просмотров 1226. Ответов 9
Метки нет (Все метки)

Встретил в книге Р.Лафоре в примере непонятную мне вещь.

зачем нужен "&" в данной конструкции?

C++
1
Distance& dist = *(new Distance)
почему бы не написать

C++
1
Distance dist = *(new Distance)
в чем разница?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2010, 12:37
Ответы с готовыми решениями:

Зачем тут нужен амперсанд "&"?
Программа с помощью контейнера сортирует строки из входного файла по алфавиту и преобразует их к...

Зачем "&" в "ostream& operator<<"?
Здарова. Я представляю, что такое перегрузка операций, но вот наткнулся на непонятный...

Зачем нужен оператор "int", если "double" может выполнять его функции?
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main() {

Зачем использовать символ "&"?
/* modf example */ #include &lt;stdio.h&gt; /* printf */ #include &lt;math.h&gt; /* modf */ int...

9
2807 / 1398 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
25.04.2010, 13:09 2
Потому, что ты конструкцией
C++
1
new Distance
выделяешь память под объект.. возвращается адресс этой памяти.. обычно использую такой подход:

C++
1
Distance *dist = new Distance;
создается указатель на Distance, которые указывает на память, выделенную под объект Distance оператором new.

Вот такая бы память, была бы нелогичной, так как присваивать объекту адресс - это против всякой логики.
C++
1
Distance dist = new Distance;
* - это оператор разыменования. он служит для того, чтобы получить доступ к объекту, зная его адресс.

То есть.. Сделав так
C++
1
Distance *dist = new Distance;
мы можем спокойно общаться с объектом.. например присвоить значение полу SomeX
C++
1
(*dist).SomeX = 4;
В этом же случае.. создается ссылка на Distance.. ссылка инициализируется не адрессом, как указатель.. а объектом.. поэтому мы и разименовываем адресс.
C++
1
Distance& dist = *(new Distance)
1
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 20
25.04.2010, 13:39  [ТС] 3
спасибо конечно.. но "&" в объявлении переменной зачем?
0
Почетный модератор
7328 / 2594 / 268
Регистрация: 29.07.2006
Сообщений: 13,583
25.04.2010, 13:43 4
jammer77, чтобы указать, что это ссылка.
0
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 20
25.04.2010, 13:54  [ТС] 5
Цитата Сообщение от Vourhey Посмотреть сообщение
jammer77, чтобы указать, что это ссылка.
C++
1
Distance dist = *(new Distance)
а чего так не написать?
0
Почетный модератор
7328 / 2594 / 268
Регистрация: 29.07.2006
Сообщений: 13,583
25.04.2010, 13:56 6
jammer77, а так это будет уже не ссылка.
0
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 20
25.04.2010, 14:45  [ТС] 7
C++
1
2
3
4
int& test = *(new int);
int test1 = *(new int);
 
test = test1 = 777;
эта запись полностью правильная?

Добавлено через 33 минуты
Цитата Сообщение от Vourhey Посмотреть сообщение
jammer77, а так это будет уже не ссылка.
и чем это плохо?
0
Почетный модератор
7328 / 2594 / 268
Регистрация: 29.07.2006
Сообщений: 13,583
25.04.2010, 14:57 8
Да, правильная.
Цитата Сообщение от jammer77 Посмотреть сообщение
и чем это плохо?
Это не плохо. Почитай в инете про ссылки, чтобы таких вопросов не задавать.
http://programmersclub.ru/14/
0
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 20
25.04.2010, 15:08  [ТС] 9
Цитата Сообщение от Vourhey Посмотреть сообщение
Да, правильная.
Это не плохо. Почитай в инете про ссылки, чтобы глупых вопросов не задавать.
http://programmersclub.ru/14/
хочу заметить что я задаю свои вопросы в топике для глупых вопросов

а вообще я нашел правильный ответ у Стратструпа:

C++
1
2
3
4
int ii = 0; 
int& rr = ii; 
rr++;   
cout<<ii; // ii равна 1
0
Почетный модератор
7328 / 2594 / 268
Регистрация: 29.07.2006
Сообщений: 13,583
25.04.2010, 15:10 10
jammer77, это не ответ, а просто кусок кода. А ответ тебе написали еще во втором сообщении. Достаточно просто прочитать про ссылки.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2010, 15:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Зачем нужен "stdafx.h" заголовок в Visual Studio
Объясните мне пожалуйста почему в visual studio 2015 у меня(да и вроде бы в прошлых версиях) когда...

Зачем перегружать операторы "++", "<<", ">>" и что они дают?
Здравствуйте. Я хотел спросить зачем перегружать оператор &quot;++&quot;, &quot;&lt;&lt;&quot;, &quot;&gt;&gt;&quot; и что они нам дают?

Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout
Добрый день! Переписал код из книг Лафоре, создание мультимножества из собственных объектов-...

В чём разница между возвратом "string" и "const string&" &
class test { public: test(const string&amp; text) { this-&gt;text = text; } string getText()...


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

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

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