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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.64
Kleyo
0 / 0 / 0
Регистрация: 10.05.2009
Сообщений: 11
#1

чем отличается вызов объекта через "." и через "->" - C++

15.05.2009, 18:28. Просмотров 2782. Ответов 24
Метки нет (Все метки)

Здравствуйте.
Вот создал топик для тех, кто желает сам познать С++, но у которых есть вопросы по базовым знаниям.

Начну с вопроса: чем отличается вызов объекта через "." и через "->"
И в каких случаях лучше применять тот или иной способ.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2009, 18:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос чем отличается вызов объекта через "." и через "->" (C++):

Иерархия классов "список"-"очередь", вызов метода через класс интерфейс - C++
Есть небольшая иерархия классов, контейнер (список) для хранения объектов каждого класса, контейнер (очередь) с указателями на объект...

Чем отличается вызов функции setlocale(0, "") от setlocale(LC_ALL,"")? - C++
Например printf(setlocale(0, "")); cout << endl; printf(setlocale(LC_ALL, "")); выдают одинаковый результат (ну, на моей...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

Через ООП: Дать для числа наименование: "рубль", "рубля", "рублей"; - C++
Помогите пожалуйста с задачей. Могу сделать ее просто, но надо через ООП и у меня не получается. Дано натуральное число N (N<20),...

Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout - C++
Добрый день! Переписал код из книг Лафоре, создание мультимножества из собственных объектов- справочник телефонный, с именем и фамилией. ...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kleyo
0 / 0 / 0
Регистрация: 10.05.2009
Сообщений: 11
16.05.2009, 17:46  [ТС] #16
Стоп еще раз.
Вопрос следующий, какие классы нужно создавать в статической памяти, а какие в динамической? Тогда это будет ответом на вопрос "Где надо применять ".", а где "->" ))))
0
Evg
Эксперт CАвтор FAQ
17818 / 6028 / 388
Регистрация: 30.03.2009
Сообщений: 16,555
Записей в блоге: 26
16.05.2009, 18:37 #17
Kleyo, ты создаёшь не классы, а экземпляры класса. Если ты вызваешь метод, то у тебя ничто нового не создаётся. Экземпляр класса или указатель на экземпляр - это всего лишь штука, от которой берётся класс, для того, чтобы понять, какую функцию вызывать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class C
{
  void func (coid);
};
 
class D
{
  void func (coid);
};
 
void main (void)
{
  C c; // экземпляр класса
  C *p = new C; // указатель на экземпляр класса
 
  // Две операции делают одно и то же - вызывают метод C::func
  // Экземпляр класса или указатель класса нужны в данном случае для того, чтобы
  // понять, что вызывается метод func класса C (а не класса D).
  // Плюс неявно передаётся параметр this (последнее относится к отличию
  // между c.func() и d.func()
  c.func();
  p->func();
}
Экземпляр класса создавай где тебе удобно. Приниципально от этого ничто не меняется. Точку надо ставить тогда, когда ты имеешь переменную типа класс (т.е. экземпляр класса), стрелку надо ставить тогда, когда ты имеешь указаетль на класс (т.е. указатель на экземпляр класса). Точка и стрелка - это не более чем синтаксис языка

Цитата Сообщение от alex_x_x Посмотреть сообщение
Evg поселил сомнения насчет терминологии указателей на классы
А в чём конкретно сомнение? Я мог не так выразиться или ты мог не так понять. Если ты начинающий программист - не стесняйся задать вопрос. А то я ещё запутаю тебя своими словами
0
Kleyo
0 / 0 / 0
Регистрация: 10.05.2009
Сообщений: 11
16.05.2009, 20:34  [ТС] #18
Цитата Сообщение от Evg Посмотреть сообщение

Экземпляр класса создавай где тебе удобно. Приниципально от этого ничто не меняется. Точку надо ставить тогда, когда ты имеешь переменную типа класс (т.е. экземпляр класса), стрелку надо ставить тогда, когда ты имеешь указаетль на класс (т.е. указатель на экземпляр класса). Точка и стрелка - это не более чем синтаксис языка
То есть на занимаемую память это абсолютно не влияет?
Получается, что принципиальной разницы не существует?
В таком случае я не понимаю, зачем есть два способа, а не один. Зачем тогда разработчикам языка вообще нужно было делать вызов через указатель?
0
Mecid
680 / 229 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
16.05.2009, 20:38 #19
чтобы вызвать с помощью оператора -> надо чтобы был указатель
а разница между A a= new A; и A a в том что в первом случае вызывается конструктор
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
16.05.2009, 20:40 #20
как зачем? что работать с объектами не зная их имени (имени переменной-лбъекта).
например: ты не знаешь кол-во требуемых тебе объектов (это кол-во расчитывается в процессе работы программы), затем ты выделяешь память под массив указателей (размером - сколько объектов тебе надо) и работаешь со всеми посредством этого массива
0
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
16.05.2009, 20:41 #21
разница между A a= new A; и A a в том что в первом случае вызывается конструктор
БСК
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
16.05.2009, 20:42 #22
Цитата Сообщение от Mecid Посмотреть сообщение
разница между A a= new A; и A a в том что в первом случае вызывается конструктор
конструктор в любом случае вызыввается.. хоть так, хоть так:

C++
1
2
A a;
A *a = new A;
0
Mecid
680 / 229 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
16.05.2009, 21:34 #23
понял ошибку...поспешные выводы....
0
Evg
Эксперт CАвтор FAQ
17818 / 6028 / 388
Регистрация: 30.03.2009
Сообщений: 16,555
Записей в блоге: 26
16.05.2009, 23:01 #24
Цитата Сообщение от Kleyo Посмотреть сообщение
В таком случае я не понимаю, зачем есть два способа, а не один. Зачем тогда разработчикам языка вообще нужно было делать вызов через указатель?
Просто в одном случае обращение идёт через объект, а в другом через указатель. Первоначальное назначение точки и стрелки (из языка Си) - это доступ к ПОЛЯМ структоры. Методы появились только в Си++ и для обращения к методам были использованы те же конструкции.

Из две, потому что в одном случае ты обращаешься через объект, а в другом - через указатель. Т.е. на уровне кода это две разные операции, но на уровне записи текста программы можно было бы сделать и одну (как с квадратными скобками)
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.05.2009, 00:03 #25
Kleyo
C++
1
2
3
4
classA a;
classA*pa=&a;
pa->go();
(*pa).go();
те стрелка в-принципи ради удобства
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2009, 00:03
Привет! Вот еще темы с ответами:

error C2040: key: "int [256]" отличается по уровням косвенного обращения от "std::ofstream" - C++
#include <iostream> #include <fstream> #include <cstdlib> #include <time.h> #include <string> using namespace std; #define size...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс "вентилятор" содержащий в себе классы:...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.05.2009, 00:03
Ответ Создать тему
Опции темы

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