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

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

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

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

04.04.2013, 22:16. Просмотров 297. Ответов 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);
Где я ошибаюсь?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2013, 22:16     Непонятки по ссылкам
Посмотрите здесь:

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

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

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

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

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

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

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

Непонятки с синтаксисом - C++
В заголовочном файле мне встретилось такое описание класса: class source_mcast_reciever { uint16_t m_port; ...

Непонятки с классами - C++
Народ, уже всё перерыл, впервые с проблемой столкнулся :( Создаю консольное приложение: файл class.h #pragma once class Order{ ...

Непонятки с bind2nd - C++
Привет. Вот к примеру есть такой код: #include <algorithm> #include <functional> #include <iostream> #include <array> ...

Непонятки с сортировкой - C++
Добрый вечер. Практически выполнил задание, но в конце возникла проблема с сортировкой, а именно, в задании нужно ввести название товара,...

Непонятки со scanf - C++
char str_check; //строка для функции "check", которая проверяет введенные данные { scanf("%s",&str_check); } выскакивает...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
04.04.2013, 22:19     Непонятки по ссылкам #2
потому что результат выражения *ptr - это ссылка.
из ссылок могут конструироваться значения за счет конструктора копирования, который принимает константную ссылку. но это делается тогда, когда нужно. а если не нужно - то и не происходит ничего. в вашем случае функция принимает ссылку а не значение.
diagon
Higher
1926 / 1192 / 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;
Познающая
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], если я правильно поняла предыдущее объяснение. Подскажите, пожалуйста, где я ошибаюсь?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.04.2013, 10:34     Непонятки по ссылкам #5
Возвращается ссылка на символ. itsString имеет тип char*. itsString[что-то] эквивалентно *(itsString + что-то), а *(itsString + что-то) может неявно приводиться к char, char& или const char&. Всё окей.
Yandex
Объявления
21.04.2013, 10:34     Непонятки по ссылкам
Ответ Создать тему
Опции темы

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