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

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

Войти
Регистрация
Восстановить пароль
 
jammer77
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 20
#1

зачем нужен "&" ? - C++

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

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

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

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

C++
1
Distance dist = *(new Distance)
в чем разница?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2010, 12:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос зачем нужен "&" ? (C++):

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

Зачем "&" в "ostream& operator<<"? - C++
Здарова. Я представляю, что такое перегрузка операций, но вот наткнулся на непонятный синтаксис. enum Months{ Jan=1,...

Зачем использовать символ "&"? - C++
/* modf example */ #include &lt;stdio.h&gt; /* printf */ #include &lt;math.h&gt; /* modf */ int main () { double param,...

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

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

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

9
Monte-Cristo
2789 / 1375 / 30
Регистрация: 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)
0
jammer77
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 20
25.04.2010, 13:39  [ТС] #3
спасибо конечно.. но "&" в объявлении переменной зачем?
0
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2010, 13:43 #4
jammer77, чтобы указать, что это ссылка.
0
jammer77
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 20
25.04.2010, 13:54  [ТС] #5
Цитата Сообщение от Vourhey Посмотреть сообщение
jammer77, чтобы указать, что это ссылка.
C++
1
Distance dist = *(new Distance)
а чего так не написать?
0
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2010, 13:56 #6
jammer77, а так это будет уже не ссылка.
0
jammer77
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
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2010, 14:57 #8
Да, правильная.
Цитата Сообщение от jammer77 Посмотреть сообщение
и чем это плохо?
Это не плохо. Почитай в инете про ссылки, чтобы таких вопросов не задавать.
http://programmersclub.ru/14/
0
jammer77
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
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2010, 15:10 #10
jammer77, это не ответ, а просто кусок кода. А ответ тебе написали еще во втором сообщении. Достаточно просто прочитать про ссылки.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2010, 15:10
Привет! Вот еще темы с ответами:

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

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

For(auto const& val : stime) .cpp(47) : error C2143: синтаксическая ошибка: отсутствие "," перед ":" - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdexcept&gt; #include &lt;locale&gt; #include &lt;cstdlib&gt; #include &lt;string&gt; #include...

Почему не работает функция std::regex_replace(temp,"amp;",""); - C++
Пробую вызывать функцию std::regex_replace(temp,&quot;amp;&quot;,&quot;&quot;); Пишет ошибку: test_ok_ruDlg.cpp 1&gt;d:\visual studio...


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

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

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