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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.88
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
#1

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

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

Например я написал такой код:
Код
#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 минут
Что, никто не знает что ли?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2010, 01:27     Понятие принципа создания динамических объектов
Посмотрите здесь:
C++ Удаление динамических объектов
Контейнер и получение динамических объектов C++
C++ Динамический массив динамических объектов
STL вектор динамических объектов C++
запись и чтение динамических объектов в файл C++
Нехватка памяти при создании динамических объектов C++
Реализовать движущийся графический объект с помощью статических и динамических объектов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
04.06.2010, 08:03     Понятие принципа создания динамических объектов #3
Для того чтоб создать объект статически, то есть память по которой будет хранится объект это стек - память выделяемая во время выполнения для моего екзе ОП памятью.
стек используется совсем не для того, в нем ни чего не хранится (тем более объекты), он служит для временного хранения каких-либо значений, либо для передачи аргументов ф-циям, вобщем по всякому бывает, но он ни чего не хранит!
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
04.06.2010, 20:30  [ТС]     Понятие принципа создания динамических объектов #4
1)Статичекая память выделяется оп. памябтью только на этапе компиляци только? Когда уже программа скомпилина, оперативная память работает с программой выделяя только ей стековую и динамическую память и больше никакую?

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

Если я напишу d->ser(); Где тут указание на объект?
Это указатель на функцию класса.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
05.06.2010, 12:14     Понятие принципа создания динамических объектов #5
Цитата Сообщение от mister2010 Посмотреть сообщение
1) оперативная память работает с программой выделяя только ей стековую и динамическую память и больше никакую?
в каждой программе есть определенный объем памяти, которая предназначена для стека и "кучи", ну и собственно сам код. Советую что-нибудь почитать на эту тему.

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

Если я напишу d->ser(); Где тут указание на объект?
Это указатель на функцию класса.
да, это тоже самое, что d.ser()
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
05.06.2010, 16:03  [ТС]     Понятие принципа создания динамических объектов #6
Код
Box *d = new Box; 
d->f(); //Это вызов функции объекта класса через указатель.
Где здесь объект класса?
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 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();
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
05.06.2010, 16:19     Понятие принципа создания динамических объектов #8
Цитата Сообщение от mister2010 Посмотреть сообщение
Код
Box *d = new Box; 
d->f(); //Это вызов функции объекта класса через указатель.
Где здесь объект класса?
на него (объект) указывает d, поэтому к ф-ции обращение через оператор "стрелка"

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Объект в памяти. В стеке или в куче - в зависимости от таго как объект создан.
А что, объект может хранится в стеке??? Что-то я сомневаюсь.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 16:26     Понятие принципа создания динамических объектов #9
Цитата Сообщение от Kastaneda Посмотреть сообщение
А что, объект может хранится в стеке??? Что-то я сомневаюсь.
Хорошо, что по твоему такое стек и по каким причинам в нем не может храниться объект?
И где он храниться, если не рамещен в куче оператором new?
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
05.06.2010, 16:46     Понятие принципа создания динамических объектов #10
Ну я может не правильно выразился. Да, в стеке хранятся временные объекты, до выхода из области видимости. А все невременные в сегменте данных, хотя для Windows это условности (всмысле сегменты).

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

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

Не по теме:

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



Добавлено через 21 минуту
Цитата Сообщение от mister2010 Посмотреть сообщение
В чём различие стековой памяти от статической в программировании?
mister2010, не забивай себе голову.
Просто запомни, объект может располагаться либо в стеке, либо в куче.
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
05.06.2010, 17:16  [ТС]     Понятие принципа создания динамических объектов #13
C
1
Просто запомни, объект может располагаться либо в стеке, либо в куче.
Статический объект или динамический?
А для чего тогда статическая память ,если стековая память и динамическая память предназначена для дин. объектов?
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 17:42     Понятие принципа создания динамических объектов #14
Цитата Сообщение от mister2010 Посмотреть сообщение
Статический объект или динамический?
Хорошо, давай так. Перечисли свою "классификацию" (статический, динамический и т.д.) объектов и что ты под этим подразумаваешь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2010, 08:57     Понятие принципа создания динамических объектов
Еще ссылки по теме:
C++ Зачем нужно освобождать память динамических объектов в деструкторе, если всё равно это сделает менеджер памяти
Способы создания объектов и арифметика указателей C++
C++ Практическое применение классов без создания объектов этого класса
C++ Чем полиморфизм отличается от принципа подстановки
C++ Понятие нейронная сеть

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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.06.2010, 08:57     Понятие принципа создания динамических объектов #15
Цитата Сообщение от mister2010
Если я напишу d->ser(); Где тут указание на объект?
Это указатель на функцию класса.
d указатель на объект (хранит адрес объекта), операция -> разыменовывает указатель и получает доступ к объекту, обращается к методу экземпляра класса
в С++ экземпляр класса могут называть объектом
Yandex
Объявления
06.06.2010, 08:57     Понятие принципа создания динамических объектов
Ответ Создать тему
Опции темы

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