0 / 0 / 0
Регистрация: 10.05.2009
Сообщений: 11
|
|
1 | |
чем отличается вызов объекта через "." и через "->"15.05.2009, 18:28. Показов 8284. Ответов 24
Метки нет (Все метки)
Здравствуйте.
Вот создал топик для тех, кто желает сам познать С++, но у которых есть вопросы по базовым знаниям. Начну с вопроса: чем отличается вызов объекта через "." и через "->" И в каких случаях лучше применять тот или иной способ.
0
|
15.05.2009, 18:28 | |
Ответы с готовыми решениями:
24
Чем отличается вставка в vector<string > через pushback и через индекс []? Вызов объекта через строковую переменную Чем поляризация света от естественного источника отличается от света, прошедшего через светофильтр Чем отличается косвенный вызов процедуры от прямого вызова? Чем отличается вызов функции(sub) c параметром call от обычного вызова? |
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
15.05.2009, 19:00 | 3 |
Kleyo,
а что, специализированная литература - это уже не модно?
0
|
0 / 0 / 0
Регистрация: 10.05.2009
Сообщений: 11
|
|
15.05.2009, 19:35 [ТС] | 4 |
Да нет я ж не случайно создал раздел "для чайников", для таких людей нужна специальная литература или объяснения простым языком.
У меня вопрос был не как объявлять и вызывать объект, а в чем разница этих подходов, и где какой из подходов должен применяться))))
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
15.05.2009, 19:58 | 5 |
Kleyo,
... в чем разница этих подходов ... '.' используется для доступа к полям/методам объекта, либо ссылки на объект, '->' - для доступа по указателю на объект. где какой из подходов должен применяться зависит от ситуации. например, можно передать в функцию либо указатель, либо ссылку, и то и другое позволит менять исходный объект, но указатель может быть и NULL, а ссылка - не может. и тому подобные нюансы, связанные с различиями между ссылкой и указателем.
0
|
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
||||||
15.05.2009, 20:05 | 6 | |||||
фактически, операция -> производить разименование....
т.е. возможен код:
(*SomeObject).SomeMethod(); SomeObject->SomeMethod(); две идентичные строчки...
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
15.05.2009, 20:09 | 7 |
две идентичные строчки...
только не с точки зрения C++
0
|
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
15.05.2009, 20:43 | 8 |
Rififi, для начала необходимо понять разницу в использовании... и что сподручней применить... а разницу с точки зрения C++ - он поймет потом, при более углубленном изучении.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
16.05.2009, 01:14 | 10 |
указатели на классы - важная штука, без них, часто бывает, никак не обойтись - области видимости, инициализация итп, так что -> рулит!
0
|
16.05.2009, 11:45 | 11 |
Класс - это такой же тип, как и всё остальное. И указатель на int по своей сути ничем не отличается от указателя на класс. Иметь объект типа класс или указатель на объект типа класс - разницы никакой
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
16.05.2009, 17:05 | 12 |
как это указатель и экземпляр класса - разные вещи, экземпляр класса хранится в памяти, а указатель - переменная, хранящая его адрес, и имеющая тип указываемого объекта
ы?
0
|
16.05.2009, 17:21 | 13 |
Ещё раз. Какая на разница, класс у нас, переменная типа double или чего-то там ещё. С этой точки зрения указатель на обычную переменную принципаильно ничем не отличается от указателя на экземпляр класса. Просто ты так восхвалил "указатеи на классы", как будто это нечто такое, без чего нельзя было бы жить
> Иметь объект типа класс или указатель на объект типа класс - разницы никакой Имелось в виду, что вызвать метод класса или обратиться к полю класса можно хоть через первое хоть через второе
0
|
0 / 0 / 0
Регистрация: 10.05.2009
Сообщений: 11
|
|
16.05.2009, 17:23 [ТС] | 14 |
Стоп! Вот, прозвучало:
Я тоже слышал, что разница в этом. Так вот, в чем разница двух этих вызовов? На сколько я понял, когда вызываешь через точку, то грубо говоря плодишь в памяти несколько экземпляров одного и того же класса, а если чере стрелочку, то обращение идет уже к загруженному экземпляру в памяти. Так ли это? И если не так, то объясните толком разницу, и где нужно применять тот или иной способ и самое главное ПОЧЕМУ?
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||||||
16.05.2009, 17:42 | 15 | |||||
да, вы правы, просто просто приминение конструкции вида
Kleyo, через точку как правило вызывают классы, созданные в статической памяти, через -> - динамические либо переданные как указатели, но Evg поселил сомнения насчет терминологии указателей на классы
0
|
0 / 0 / 0
Регистрация: 10.05.2009
Сообщений: 11
|
|
16.05.2009, 17:46 [ТС] | 16 |
Стоп еще раз.
Вопрос следующий, какие классы нужно создавать в статической памяти, а какие в динамической? Тогда это будет ответом на вопрос "Где надо применять ".", а где "->" ))))
0
|
16.05.2009, 18:37 | 17 | |||||
Kleyo, ты создаёшь не классы, а экземпляры класса. Если ты вызваешь метод, то у тебя ничто нового не создаётся. Экземпляр класса или указатель на экземпляр - это всего лишь штука, от которой берётся класс, для того, чтобы понять, какую функцию вызывать.
А в чём конкретно сомнение? Я мог не так выразиться или ты мог не так понять. Если ты начинающий программист - не стесняйся задать вопрос. А то я ещё запутаю тебя своими словами
0
|
0 / 0 / 0
Регистрация: 10.05.2009
Сообщений: 11
|
|
16.05.2009, 20:34 [ТС] | 18 |
То есть на занимаемую память это абсолютно не влияет?
Получается, что принципиальной разницы не существует? В таком случае я не понимаю, зачем есть два способа, а не один. Зачем тогда разработчикам языка вообще нужно было делать вызов через указатель?
0
|
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
|
|
16.05.2009, 20:38 | 19 |
чтобы вызвать с помощью оператора -> надо чтобы был указатель
а разница между A a= new A; и A a в том что в первом случае вызывается конструктор
0
|
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
16.05.2009, 20:40 | 20 |
как зачем? что работать с объектами не зная их имени (имени переменной-лбъекта).
например: ты не знаешь кол-во требуемых тебе объектов (это кол-во расчитывается в процессе работы программы), затем ты выделяешь память под массив указателей (размером - сколько объектов тебе надо) и работаешь со всеми посредством этого массива
0
|
16.05.2009, 20:40 | |
16.05.2009, 20:40 | |
Помогаю со студенческими работами здесь
20
Чем отличается экземпляр класса от объекта? Что такое экземпляр объекта? Чем отличается вызов конструктора в объявлении поля, от вызова при создании экземпляра? Есть 2 ноута и 2 любых мобильника. Возможно ли соединить компы через мобильники, через голосовой вызов? Монитор через пк показывает лучше, чем монитор через ноутбук. В чём проблема? Строка через указатель и через массив - в чем преимущества каждого подхода В чем разница передачи значения через bundle или через navArgs? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |