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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2012, 18:24   #1
andreyasu
 
Регистрация: 05.06.2009
Сообщений: 5
По умолчанию Динамические классы

Вообщем не могу понять , допустим есть класс
PHP код:
class Bred
{
public:
Bred();
~
Bred();
int GetAge()  {return *age;}

private:
int *age;

};
Bred::Bred()
{
age=new int;
}
Bred::~Bred()
{
delete age;

Тут мы определили класс с переменной age которая храниться в динамической памяти , но теперь если мы создаем экземпляр объекта в динамической памяти bred *a=new bred; что вообще это дает, чем это отличается от просто объявления bred b; bred *a=&b; ?? помогите в голове каша

Последний раз редактировалось andreyasu; 30.11.2012 в 18:35.
andreyasu вне форума Ответить с цитированием
Старый 30.11.2012, 18:57   #2
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

bred *a= &b;
Передаешь объектному указателю адрес другого объекта. Почитай про полиморфизм.

bred *a=new bred;
Динамический объект задается тогда когда количество вводимых данных тебе неизвестно, то есть динамический массив объектов. Следующая запись я думаю наведет тебя на мысль

Код:
for (int i = 0; i < n; i++)
{
 a[i].age = i;
}
Можно еще объявить так bred a[50]; Таким образом память для объектов будет выделена автоматически и в случае если ты попытаешься обратиться за пределы допустимого диапазона, естественно произойдет ошибка.

Правильно
Код:
for (int n = 0; n < 50; n++)
{
 a[i].age = i;
}
Не правильно
Код:
for (int n = 0; n < 55; n++)
{
 a[i].age = i;
}

Последний раз редактировалось coNsept; 30.11.2012 в 19:02.
coNsept вне форума Ответить с цитированием
Старый 30.11.2012, 19:58   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от andreyasu Посмотреть сообщение

Тут мы определили класс с переменной age которая храниться в динамической памяти , но теперь если мы создаем экземпляр объекта в динамической памяти bred *a=new bred; что вообще это дает, чем это отличается от просто объявления bred b; bred *a=&b; ?? помогите в голове каша
//создан на стеке. age хранит указатель на кусок памяти, взятой из кучи
bred b;

//создан на стеке. age хранит указатель на кусок памяти, взятой из кучи
bred *a=&b;

//создан на куче. age хранит указатель на кусок памяти, взятой из кучи
bred *с= new bred();
_Bers вне форума Ответить с цитированием
Старый 30.11.2012, 20:02   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Почитай про полиморфизм.
К полиморфизму это не имеет никакого отношения.
Цитата:
Динамический объект задается тогда когда количество вводимых данных тебе неизвестно
Динамический объект создается, когда нужен динамический объект, а вариантов тут - тысячи.

andreyasu, вот такой код
Код:
Bred b;
создаст переменную b локально (фактически - на стеке), член age - это только указатель, он тоже будет на стеке, а вот данные, на которые он указывает, будут в куче (в динамической памяти).

Код:
Brad * b = new Bred;
Здесь b - это уже указатель, а не объект класса Bred. Он будет создан локально (на стеке), но еще в динамической памяти создастся объект класса Bred, адрес этого объекта запишется в указатель b. Член age этого объекта будет лежать там же, где объект. Где-то еще в динамической памяти будет создан int, и его адрес будет записан в член age.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы. Динамические массивы. Чтение из файла. asmars Общие вопросы C/C++ 6 16.04.2012 00:48
динамические структуры Saloma Паскаль, Turbo Pascal, PascalABC.NET 3 12.12.2011 00:01
Динамические массивы в c++ kosteck Помощь студентам 1 19.12.2010 18:08
Динамические масивы на с++ Olya90 Помощь студентам 5 21.04.2009 11:37