0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
1

Понятие принципа создания динамических объектов

04.06.2010, 01:27. Показов 9802. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Например я написал такой код:
Код
#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)Почему, чтоб получить доступ динамически к классу нужно именно
писать имя указателя который содержит в себе область памяти по которой лежит что-то из класса?

Добавлено через 3 часа 40 минут
Что, никто не знает что ли?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2010, 01:27
Ответы с готовыми решениями:

Создания динамических объектов
Здравствуйте.) Создаю динамические GroupBox на динамически создающихся TabSheet в PageControl. ...

Использование динамических объектов с использованием других динамических объектов
Есть 2 массива, один создаёт Combobox, второй - Memo. Они создаются в количестве связаное с...

Не понимаю принципа создания файла
Работяги, всем привет, есть проблема, пишу программу, которая должна создавать определённую...

Создание динамических объектов
Как на WPF реализовать динамическую карту объектов, как на рисунке. Каждый объект квадрат...

15
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
04.06.2010, 03:27 2
C++
1
Box * lyk = new Box;
создаётся переменная lyk, она имеет тип указатель на объект типа Box
значит она может хранить адрес объекта типа Box
new Box - выделяет память для объекта типа Box, возвращает адрес этой памяти
адрес выделенной памяти записывается в переменную lyk

всё это можно записать так
C++
1
2
3
4
5
6
7
8
    Box *lyk;
 
    lyk = new Box;
 
    cout << lyk->z << endl;
 
    delete lyk; // из переменной lyk взяли адрес памяти и передали его оператору delete
                // он дальше сам занимается
Добавлено через 2 минуты
смысл в том, что в переменную lyk можно записывать новый адрес
записали, поюзали, освободили, выделили новый, записали, поюзали, освободили ...
также туда можно записывать адрес просто любого объекта типа Box, даже если он создан не через new
2
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
04.06.2010, 08:03 3
Для того чтоб создать объект статически, то есть память по которой будет хранится объект это стек - память выделяемая во время выполнения для моего екзе ОП памятью.
стек используется совсем не для того, в нем ни чего не хранится (тем более объекты), он служит для временного хранения каких-либо значений, либо для передачи аргументов ф-циям, вобщем по всякому бывает, но он ни чего не хранит!
1
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
04.06.2010, 20:30  [ТС] 4
1)Статичекая память выделяется оп. памябтью только на этапе компиляци только? Когда уже программа скомпилина, оперативная память работает с программой выделяя только ей стековую и динамическую память и больше никакую?

2)Box *d = new Box;
d это только переменная которая будет содержать адрес объекта, а почему объекта?

Если я напишу d->ser(); Где тут указание на объект?
Это указатель на функцию класса.
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
05.06.2010, 12:14 5
Цитата Сообщение от mister2010 Посмотреть сообщение
1) оперативная память работает с программой выделяя только ей стековую и динамическую память и больше никакую?
в каждой программе есть определенный объем памяти, которая предназначена для стека и "кучи", ну и собственно сам код. Советую что-нибудь почитать на эту тему.

2)Box *d = new Box;
d это только переменная которая будет содержать адрес объекта, а почему объекта?
d - это переменная, которая содержит адрес указанного типа данных, в данном случае это тип Box, т.е. объект класса.

Если я напишу d->ser(); Где тут указание на объект?
Это указатель на функцию класса.
да, это тоже самое, что d.ser()
0
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
05.06.2010, 16:03  [ТС] 6
Код
Box *d = new Box; 
d->f(); //Это вызов функции объекта класса через указатель.
Где здесь объект класса?
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 16:09 7
Цитата Сообщение от mister2010 Посмотреть сообщение
Где здесь объект класса?
Объект не "здесь" или "там". Объект в памяти. В стеке или в куче - в зависимости от таго как объект создан.

К членам объекта можно обращатся напрямую:
C++
1
2
ClassName object;
object.FunctionName();
или косвенно, через указатель:
C++
1
2
ClassName* object = new ClassName;
object->FunctionName();
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
05.06.2010, 16:19 8
Цитата Сообщение от mister2010 Посмотреть сообщение
Код
Box *d = new Box; 
d->f(); //Это вызов функции объекта класса через указатель.
Где здесь объект класса?
на него (объект) указывает d, поэтому к ф-ции обращение через оператор "стрелка"

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Объект в памяти. В стеке или в куче - в зависимости от таго как объект создан.
А что, объект может хранится в стеке??? Что-то я сомневаюсь.
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 16:26 9
Цитата Сообщение от Kastaneda Посмотреть сообщение
А что, объект может хранится в стеке??? Что-то я сомневаюсь.
Хорошо, что по твоему такое стек и по каким причинам в нем не может храниться объект?
И где он храниться, если не рамещен в куче оператором new?
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
05.06.2010, 16:46 10
Ну я может не правильно выразился. Да, в стеке хранятся временные объекты, до выхода из области видимости. А все невременные в сегменте данных, хотя для Windows это условности (всмысле сегменты).

Добавлено через 6 минут
Хотя сейчас погуглил, блин странно все это... Похоже объекты хранятся в стеке. Просто я на С++ после ASM'а перешел и меня удивляет такое использование стека.

Добавлено через 7 минут
Да, объекты хранятся в стеке!
CyBOSSeR, а почему вы меня не поправили в 3ем посту (посте , хз))? Я до сих пор о стеке думал в формате ASM
0
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
05.06.2010, 16:46  [ТС] 11
В чём различие стековой памяти от статической в программировании?
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 17:14 12

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
CyBOSSeR, а почему вы меня не поправили в 3ем посту (посте , хз))?
Видать не заметил.
Цитата Сообщение от Kastaneda Посмотреть сообщение
Я до сих пор о стеке думал в формате ASM
Ну чтож, придеться перестраиваться на C++:).



Добавлено через 21 минуту
Цитата Сообщение от mister2010 Посмотреть сообщение
В чём различие стековой памяти от статической в программировании?
mister2010, не забивай себе голову.
Просто запомни, объект может располагаться либо в стеке, либо в куче.
1
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
05.06.2010, 17:16  [ТС] 13
C
1
Просто запомни, объект может располагаться либо в стеке, либо в куче.
Статический объект или динамический?
А для чего тогда статическая память ,если стековая память и динамическая память предназначена для дин. объектов?
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 17:42 14
Цитата Сообщение от mister2010 Посмотреть сообщение
Статический объект или динамический?
Хорошо, давай так. Перечисли свою "классификацию" (статический, динамический и т.д.) объектов и что ты под этим подразумаваешь.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
06.06.2010, 08:57 15
Цитата Сообщение от mister2010
Если я напишу d->ser(); Где тут указание на объект?
Это указатель на функцию класса.
d указатель на объект (хранит адрес объекта), операция -> разыменовывает указатель и получает доступ к объекту, обращается к методу экземпляра класса
в С++ экземпляр класса могут называть объектом
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
06.06.2010, 13:23 16
Память под статический объект выделяется на этапе компиляции. Грубо говоря, они размещаются в самом исполняемом файле. Глобальные статические объекты инициализируются до выполнения main, локальные - при первом заходе в содержащую их функцию. Разрушаются после выхода из main.
Автоматические объекты размещаются на стеке. Выделение памяти и инициализация происходит при заходе в область видимости (scope), разрушается объект при выходе из этой области.
Динамические объекты создаются и разрушаются по ходу выполнения программы явным образом. А когда их забывают вовремя уничтожить, тут-то и начинается веселье и утечки памяти и других ресурсов.
0
06.06.2010, 13:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2010, 13:23
Помогаю со студенческими работами здесь

Удаление динамических объектов
есть программа, в которой реализован список объектов, создающиеся динамически. Перед вами функция,...

Свойства динамических объектов
Доброго времени суток. Пожалуйста, помогите понять, как задать свойство для каждого создаваемого...

Перемещение динамических объектов
Есть класс, который наследуется от TImage Сделал ему два обработчика, для того чтобы мог...

Отрисовка динамических объектов
У меня игрок стреляет пулями, которые надо создавать и отображать. Например, для игрока я создаю...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru