Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2010, 20:55   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию Понятия принципа создания динамических объектов

Например я написал такой код:
Код:
#include <iostream>
#include <string>

using namespace std;

class Box
{
     public:
           double width;
           int z;
           Box(char *u) { cout<<u<<endl; };
		   Box(int rediska) { cout<<rediska; };
           Box() {};
     };

int main()
{
     setlocale(0,"");

     Box *d1 = new Box("Привет клоун");
     Box *d2 = new Box(7);
     Box * lyk = new Box;
     Box(); 

     delete d1;
     delete d2;

     cin.get();
}
Для того чтоб создать объект статически, то есть память по которой будет хранится объект это стек - память выделяемая во время выполнения для моего екзе ОП памятью. То есть вот это
Код:
Box induk; //Создание объекта который будет иметь имя индюк
Когда же я написал:
Код:
Box * lyk = new Box;
Это означает что я объявил указатель под названием лук, который ссылается на область памяти по которой лежит что-то из класса, и этот указатель лук после того как сослался на область памяти по которой к примеру лежит переменная z из класса Box, указатель лук присваивает себе эту область памяти;

1)Где тут создается объект динамический, если это указатель на что-то из класса?
2)Почему, чтоб получить доступ динамически к классу нужно именно
писать имя указателя который содержит в себе область памяти по которой лежит что-то из класса?

Последний раз редактировалось Golovastik; 03.06.2010 в 21:46.
Golovastik вне форума Ответить с цитированием
Старый 03.06.2010, 21:06   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Код:
Box * lyk = new Box;
Это значит что выделяется память на весь объект Box, который инициализируется конструктором Box();
И это не указатель на что - то из класса, а указатель на начало того адресного пространства, где лежит ЦЕЛЫЙ класс.
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 03.06.2010, 22:46   #3
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

1)Почем в книге пишут что указатель находится в стеке, а объект в куче, как это понимать?
2)
Код:
И это не указатель на что - то из класса, а указатель на начало того адресного пространства, где лежит ЦЕЛЫЙ класс.
Это как понимать?

3) Где статически хранятся объекты а где динамические хранятся?

4)Последнее, что тревожит, если создать статически объект, он имеет имя, а динамически,
какое имя имеет объект?

Последний раз редактировалось Golovastik; 03.06.2010 в 22:59.
Golovastik вне форума Ответить с цитированием
Старый 03.06.2010, 22:53   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

указатель это адрес в памяти, а обьект находится на стеке.
NiCola999 вне форума Ответить с цитированием
Старый 04.06.2010, 00:37   #5
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Как грамотно ответить что означает вот это объявление первой и второй строки?

Код:
     Box *d 

     В= new Box;
2)Всё хранится в виде объектов в статической и динамической памяти? Если да, то почему?

Последний раз редактировалось Golovastik; 04.06.2010 в 00:51.
Golovastik вне форума Ответить с цитированием
Старый 04.06.2010, 00:50   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

первая строка это обьявления указателя на обьект класса Box
второе это создание обьекта и присвоения значения указателя на него(то что вернет new) нашему указателю что выше обьявили.
о вопросах:
1)ну а локальные переменные гле находятся?
указатель у нас локальный, но обьект на который он указывает находится в куче(там его new создает)
2)потому что по указателю находится ВЕСЬ обьект класса, а не чтото от него.
3)смотря как созданы, если локальные(не через new)то в стеке, иначе в куче(через new).
4)какой это обьект имеет имя?
покажите интерестно.(если имеется в виду переменная, то вспомните что такое переменная для компилятора)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.06.2010, 00:52   #7
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

может так?
Код:
Box *d ;
d = new Box;

Код:
 Box *d;
создается указатель на тип Box - адрес в памяти, заполняется случайным числом


Код:
 d = new Box;
динамическое выделение памяти под элемент типа Box и присвоение адреса этого элемента указателю d;
NiCola999 вне форума Ответить с цитированием
Старый 04.06.2010, 01:02   #8
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Код:
Box *d = new Box;
1)Это объявление указателя с именем d на адресс памяти по которому лежит что-то из класса и присвоение указателю этого адресса, правильно ли я расшифровую?
2)Если d это указатель на один из членов класса, тогда где тут создание объекта, раз здесь просто указание происходит и присвоение этому указателю адресса одного из членов класса?
3)Box *d = new Box;
d это только переменная которая будет содержать адрес объекта, а почему объекта?

Если я напишу d->ser(); Где тут указание на объект?
Это указатель на функцию класса.

Последний раз редактировалось Golovastik; 04.06.2010 в 01:13.
Golovastik вне форума Ответить с цитированием
Старый 04.06.2010, 08:37   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
а почему объекта?
Потому что Box класс.

Цитата:
Если я напишу d->ser(); Где тут указание на объект?
В записи нет. А фактически он лежит по адресу, содержащемуся в d. Указание у компилятора в голове.

Цитата:
Это указатель на функцию класса.
Нет, это вызов функции объекта класса через указатель.

Последний раз редактировалось p51x; 04.06.2010 в 08:47.
p51x вне форума Ответить с цитированием
Старый 04.06.2010, 20:08   #10
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Статичекая память выделяется оп. памябтью только на этапе компиляци только? Когда уже программа скомпилина, оперативная память работает с программой выделяя только ей стековую и динамическую память и больше никакую?
Golovastik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление динамических объектов / полная очистка формы 095 Общие вопросы Delphi 3 23.04.2012 16:09
События для объектов динамических массивов Delphi7 Dalagardi Помощь студентам 7 24.03.2010 08:59
Проблема с созданием динамических объектов. (Delphi7) Dalagardi Помощь студентам 2 15.03.2010 17:15
Имя динамических объектов PVD Общие вопросы Delphi 26 09.02.2010 15:38
Процедуры для динамических объектов Fruit Общие вопросы Delphi 8 30.12.2008 21:10