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

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

Войти
Регистрация
Восстановить пароль
 
Познающая
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 25
#1

Непонятки по ссылкам - C++

04.04.2013, 22:16. Просмотров 309. Ответов 4
Метки нет (Все метки)

Доброго времени суток!
Помогите, пожалуйста разобраться. Изучаю ссылки и мне кое-что не понятно.
Допустим мы объявили функцию:

C++
1
2
3
4
void RefFunction (Cat & rCat)
{
    rCat.Speak();
}
а затем ее вызываем в главной функции и передаем ей ссылку на объект:

C++
1
2
3
4
5
6
int main ()
{
Cat * ptr=new Cat;
RefFunction (* ptr);
return 0;
}
Мне не понятно, почему в строчке "RefFunction (*ptr);" мы передаем разыменнованый указатель * ptr, т. е. значение объекта, а не адрес на этот объект, содержащийся в этом указателе, ведь при объявлении ссылки мы присваиваем ей адрес объекта?
По мне, так должно было быть так:
RefFunction (ptr);
Где я ошибаюсь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2013, 22:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятки по ссылкам (C++):

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

Накидать задачек по ссылкам и указателям - C++
Добрый день, форумчане! Просьба накидать задачек по ссылкам и указателям! Даюы разобраться, как следует.:) Заранее спасибо!:)

Имитация кликов по ссылкам в браузере программы - C++
Здравствуйте. Пытаюсь написать программу, которая будет копировать предложенные посты в группе себе в память, и дальше с этим работать....

Ищу литературу по созданию бота, переходящего по ссылкам - C++
Здравствуйте, хочу написать бота на с++ с функциями ввода информации и переходами на ссылки. Можете скинуть/посоветовать литературу или...

Передача параметров по значению и по константным ссылкам применительно к шаблонам - C++
Такс... С xvalue разобрались, вопрос следующий. Допустим у меня есть шаблон некой операции. Например template<typename T> ...

Что будет выведено на экран по данным указателям и ссылкам? - C++
Привет! Все никак до конца не могу понять указатели и ссылки. #include <stdlib.h> #include <iostream> using namespace std; ...

4
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
04.04.2013, 22:19 #2
потому что результат выражения *ptr - это ссылка.
из ссылок могут конструироваться значения за счет конструктора копирования, который принимает константную ссылку. но это делается тогда, когда нужно. а если не нужно - то и не происходит ничего. в вашем случае функция принимает ссылку а не значение.
1
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.04.2013, 22:22 #3
Цитата Сообщение от Познающая Посмотреть сообщение
т. е. значение объекта
Все же скорее ссылку. При разыменовании получается ссылка.
//В стандарте я подобного не видел, но так проще запомнить.
Цитата Сообщение от Познающая Посмотреть сообщение
ведь при объявлении ссылки мы присваиваем ей адрес объекта
Нет, сам объект, то есть как бы даем второе имя.

имхо, чтобы понять ссылки, нужно просто знать, что это синтаксический сахар над указателями.
Т.е. при
C++
1
2
int a = 2;
int &ref = a;
На самом деле происходит
C++
1
int *ref = &a;
А при
C++
1
2
int &ref = a;
int c = ref;
Получается
C++
1
2
int *ref = &a;
int c = *ref;
1
Познающая
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 25
21.04.2013, 10:01  [ТС] #4
У меня появился еще один вопрос по ссылкам в перегруженном операторе индексирования:
C++
1
2
3
4
5
6
7
char & String::operator[](int offset)
{
 if (offset>itsLen)
  return itsString[itsLen-1];
 else
  return itsString[offset];
}
где itsLen - закрытая переменная-член класса String, хранящая длину строки без нулевого символа, также данный класс содержит указатель на массив char * itsString.
Я не понимаю почему результатом выполнения этого оператора является itsString[itsLen-1] или itsString[offset], если должна возвращаться ссылка на символ, а здесь, как мне кажется, возвращается сам символ? По мне, здесь должно быть так: * itsString[itsLen-1] и * itsString[offset], если я правильно поняла предыдущее объяснение. Подскажите, пожалуйста, где я ошибаюсь?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.04.2013, 10:34 #5
Возвращается ссылка на символ. itsString имеет тип char*. itsString[что-то] эквивалентно *(itsString + что-то), а *(itsString + что-то) может неявно приводиться к char, char& или const char&. Всё окей.
1
21.04.2013, 10:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 10:34
Привет! Вот еще темы с ответами:

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

непонятки с Си - C++
вобщем вот что задали Вот что я зделал при выполнении пишет s=none(или nane-как то так)/почему так?где ошибка? у кого то так же...

непонятки - C++
у меня есть прога которая берет дабл и разделяет его на две сост. целое и дробное this->z = int(d); this->p = ( d - int(d)...

непонятки с for - C++
Издавна мучает вопрос почему некоторые используют в цикле for ( int i = n; i < m ; i++), а другая часть населения for ( int i = n; i < m ;...


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

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

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