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

Указатель,объект класса размещенный в динамической памяти - C++

Восстановить пароль Регистрация
 
mrKi
2 / 2 / 0
Регистрация: 01.08.2013
Сообщений: 60
01.08.2013, 22:26     Указатель,объект класса размещенный в динамической памяти #1
Ребят,такой маленький нелепый вопрос. Как можно обратиться к объекту класса созданному в динамической памяти(через "new")?;
В моей книге описано два способа. Первый ,к примеру вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
class cat
{
      public:
             int a;
};
int main()
{
 cat *pNelsi= new cat;
 (*pNelsi).a=10;
 cout<<(*pNelsi).a<<endl;
 system("pause");
}
работает без проблем. Но так же описан и второй (не через скобки а через ->).Ниже пример;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
class cat
{
      public:
             int a;
};
int main()
{
 cat *pNelsi= new cat;
 (*pNelsi).a=10;
 cout<<*pNelsi->a<<endl;
 system("pause");
}
Так вот этот второй вариант и не работает,почему? Не так важно,есть ведь и первый ,но хотелось бы до конца разобраться)
P.S. про то что после использование память нужно освободить через delete пожалуйста не пишите, в торопях пример писал
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2013, 22:26     Указатель,объект класса размещенный в динамической памяти
Посмотрите здесь:

C++ Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a?
Указатель на объект класса C++
Классы. Объявить массив динамически и сделать указатель на объект в динамической памяти C++
Обращение к свойству класса в динамической памяти C++
C++ Ошибка при попытке разыменовать указатель, который размещен в динамической памяти другим процессом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
01.08.2013, 22:28     Указатель,объект класса размещенный в динамической памяти #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
class cat
{
      public:
             int a;
};
int main()
{
 cat *pNelsi= new cat;
 (*pNelsi).a=10;
 cout<<pNelsi->a<<endl;
 system("pause");
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2013, 22:38     Указатель,объект класса размещенный в динамической памяти #3
Тогда уж так:
C++
1
2
pNelsi ->a = 10;
cout << pNelsi ->a << endl;
zer0mail
2185 / 1868 / 187
Регистрация: 03.07.2012
Сообщений: 6,640
Записей в блоге: 1
01.08.2013, 23:02     Указатель,объект класса размещенный в динамической памяти #4
Если p - указатель на объект, то (*p).a и p->a равноценны (но 2-й вариант короче).
Кроме того, *p->a не то же самое: берется объект, на который указывает поле а в объекте, на который указывает p (длинно, но зато точно)
Может, так будет понятнее: *p->a то же самое, что *(p->a).

А еще есть ссылки и интеллектуальные (они же умные) указатели...
mrKi
2 / 2 / 0
Регистрация: 01.08.2013
Сообщений: 60
01.08.2013, 23:12  [ТС]     Указатель,объект класса размещенный в динамической памяти #5
Спасибо ,ребят ) Всему виной моя невнимательность.. Не так переписал пример из книги.
Отдельное спасибо zero0mail за понятное разъяснение!)
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 01:36     Указатель,объект класса размещенный в динамической памяти #6
и динамическая память тут не причём. Это работает с указателями на любые структуры хоть выделенные new, хоть хранящиеся в переменных.
Но это так, дополнение.
Yandex
Объявления
02.08.2013, 01:36     Указатель,объект класса размещенный в динамической памяти
Ответ Создать тему
Опции темы

Текущее время: 12:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru