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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбираемся с основами, нужна помощ 
V
    Опции темы
Ratman
Дата 4.7.2008, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Делаю, так сказать, очередной шаг в освоении ЯП. На этот раз шагнул в С и сразу по колено увяз.

Щас читаю книжку Бьярна Страустрапа "Введение в язык С++" (на самом деле лучшее, что я нашел из книжек)
И посути не всё так плохо, но я окончательно запутался в двух штуках:

Штука #1:
То-ли он так пишет, то-ли я так читаю (в пол-второго ночи), то-ли еще чего, но я не могу понять разницы в использовании      .        ->       ::
про все три варианта книжка говоритъ "сначало объект, потом символ(ы), потом член класса объекта". Пробовал методом научного тыка - закономерности не выяснил. Компилятор ругается абсолютно неожиданно.




Штука #2:
int* р  == объявление указателя
р+1  ==  воздействие на указатель
*р+1  == воздействие на объект по адресу.
При этом (р) - указатель - 32битное число, а (*р) - объект типа int

читаю далее и вижу:
&объект - адрес объекта в памяти - 32битное число
тип& s - объявление ссылки на объект
&s - адрес объекта

Думаю: создатели языка явно не дурные особи, значит это только я не вижу разницы в использовании "указателя" и "ссылки"




Итого: кому вечером охота написать в двух словах 
в чем разница точки, 2х двоеточий и -> стрелочки ?
в чем разница указателей * и ссылок & ?



Это сообщение отредактировал(а) Ratman - 4.7.2008, 01:44
PM MAIL   Вверх
mes
Дата 4.7.2008, 02:00 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



ссылка это адрес переменной, а указатель это переменная храняшая ссылка
если переменная объявлена как указатель то надо обрашаться к методам, через "->"
иначе через ".".  A "::" для обрашения к статическим методам/переменным класса,
только перед ними ставится имя класса, а не переменная обьекта



--------------------
PM MAIL WWW   Вверх
mrbrooks
Дата 4.7.2008, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Если доступ к элементам структур, классов и т.д осуществляется через объект, то используется операция точка.

Если доступ к элементам структур, классов и т.д осуществляется через указатель на объект, то используется операция стрелка.

:: - операция разрешения области видимости и к '.' и ->'' никакого отнощения не имеет.

* - указатель, переменная, значение которой равно аддреса памяти, по которому лежит значениенекоторой другой переменной. Указатели имеют широкое применение.

& - ссылка, специальный тип указателя, который позволяет работать с указателем как с объектом. Хороши при использовании в функциях.

Это все в кратце. Вообще с ходу старину Бьерна возможно читать не стоит. Поищи что нибудь попроще для начала. В смысле мануал.


PM MAIL   Вверх
bsa
Дата 4.7.2008, 16:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(Ratman @ 4.7.2008,  01:42)
Штука #1:
То-ли он так пишет, то-ли я так читаю (в пол-второго ночи), то-ли еще чего, но я не могу понять разницы в использовании      .        ->       ::

Код
class MyClass
{
public:
    enum { someValue = 10 };
    void method1() {}
    static void method2() {}
};
оператор :: используется тогда, когда для операции не нужен сам объект класса. В данном случае, он применим для вызова method2() и получения значения someValue. Делается это так: MyClass::someValue и MyClass::method2().
Точка отличается от стрелки только тем, что вторая нужна для доступа к полям/методам объекта по указателю на него:
Код
MyClass mc;
MyClass *pMc = &mc;
mc.method1();
pMc->method1();


Цитата(Ratman @ 4.7.2008,  01:42)
в чем разница указателей * и ссылок & ?
Код
int x;
int *pointer = &x; //pointer - это указатель
int y;
int &reference = y; //reference - ссылка на y

*pointer = 10; //x = 10;
++*pointer; //x = 11
reference = 15; //y = 15;
++reference; //y = 16
pointer = &y; //ok
reference = x; //ошибка!!!

PM   Вверх
Ratman
Дата 4.7.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо всем за разъяснения
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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