Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> & vs *, who is who 
:(
    Опции темы
GKosh
Дата 21.1.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 27.12.2005

Репутация: нет
Всего: нет



Дилетанский вопрос : в чем разница между поинтерами и референсами. Что вообще такое референс. Заметил, что очень удобно пользоваться < Class& > вместо < Class* > например в списках или передавать в качестве аргумента функции. Появляется соблаз пользоваться ими везде, так в чем ограничения, где референсы "не катят", и что будет если Class& object = new Class();?

Заранее спасибо, Константин.
PM MAIL   Вверх
Mayk
Дата 21.1.2006, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Значение ссылки нельзя [легально] менять . С ссылкой можно менять лишь внутренности объекта, на который ссылается ссылка.
Ссылка не может быть [легально] нулевой.
Ссылка должна быть проинициализирована(надо явно указать куда ссылаться). Указатель может быть проинициализирован, а может и не быть.

Указатели следует использовать, если
1) в качестве объекта можно использовать NULL(пример - связный список, поле next может быть NULL'ем, что означает конец списка),
2) есть необходимость сослаться на другой объект через тот же указатель (пример - опять связный список, поле next следует делать указателем, так как для вставки нового элемента надо изменить указатель next)
3)по каким-то причинам нельзя сразу узнать на что ссылаться.
4)объект следует удалить вызовом delete (delete &something; чаще всего сработает, но выглядит это омерзительно)


Цитата(GKosh @ 22.1.2006, 01:00 Найти цитируемый пост)

и что будет если Class& object = new Class();?

Ошибка времени компиляции.
Class& object = *new Class(); сработает, но делать так не надо.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
CPlusPlusFAN
Дата 23.1.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

Репутация: нет
Всего: нет



Очень часто возникает путаница с указателями!
IMHO: Это делает язык си крайне трудным для начинающих.
PM MAIL ICQ Jabber   Вверх
np9mi7
Дата 23.1.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: 5
Всего: 10



Цитата
3)по каким-то причинам нельзя сразу узнать на что ссылаться.
, это что значит?


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
CPlusPlusFAN
Дата 23.1.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

Репутация: нет
Всего: нет



Цитата

это что значит?

Я так думаю, что в определённые моменты значение может быть NULL.
PM MAIL ICQ Jabber   Вверх
Mayk
Дата 23.1.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(np9mi7 @ 23.1.2006, 18:10 Найти цитируемый пост)

это что значит?

Код

Foo* foo;
if(something){
    doSomething1();
    doSomething2();
    while(something4) 
      doSomething5();
    foo = doSomething3();
} else {
   foo = doSomething6();
}
foo->doSomething();



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
nikitao
Дата 23.1.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 1
Всего: 26



Полный список ограничений на ссылки любого типа(согласно Standart С++):
[*]Нельзя ссылаться на другую ссылку
[*]Нельзя получать адрес ссылки
[*]Нельзя создавать массивы ссылок
[*]Нельзя ссылаться на битовые поля
[*]Ссылка должна быть иниц. до того как станет членом класс ,возвратить значение ф-ции или стать ее параметром


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0690 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.