Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Создать массив объектов |
Автор: gray_k 21.8.2003, 16:32 |
Есть класс class CMyClass { public: ... CMyClass(/*здесь набор параметров*/); } Как в программе динамически создать массив объектов такого класса? CMyClass *MyClassArray; MyClassArray = new MyClassArray[N](как бы сюда набор параметров передать) такой код ругается, оно и понятно, написал чтобы было понятно, что я хочу. Как это сделать? |
Автор: DENNN 21.8.2003, 16:38 |
Ищем инфу про динамические массивы, или смотрим справку по vector. |
Автор: maxim1000 21.8.2003, 16:39 |
1. можно после создания в цикле пройтись по объектам и установить их параметры 2. можно объявить CMyClass **MyClassArray, тогда это будет массив указателей на объекты, потом опять же пройтись циклом и сделать MyClassArray[c] = new CMyClass(/*здесь набор параметров*/); |
Автор: HexoGenus 26.8.2003, 17:59 | ||
Максим немного некорректно объясняешь... 1. После создания уже поздно, ведь параметры передаются в конструкторе ![]() 2. **MyClassArray это еще не массив это "неинициализированный указатель на начало массива указателей" и ты начинаешь использовать этот массив не выделив под него память а это не есть гуд ![]() (Хотя остальное все достоверно ![]() Нужно так:
|
Автор: HexoGenus 26.8.2003, 18:09 |
Кстати это все мы создаем массивы указателей на классы ... получается что массив классов у которых нет конструктора без параметров динамически создать нельзя ![]() (Для любителей поспорить в пустую заранее предупреждаю что под массивом классов я подразумеваю то что они расположены в памяти непосредственно друг за другом) |
Автор: Phantom 26.8.2003, 21:55 |
Нельзя создать массив обьектов которые не имеют конструктора по умолчанию (без параметров) - так написано в умной книжке. |
Автор: mr.DUDA 26.8.2003, 22:02 |
Конструктор без параметров существует в любом классе. Если он не объявлен в явном виде, то для инициализации объекта в массиве или контейнере используется конструктор без параметров по умолчанию (который не выполняет никаких действий, кроме инициализации объектов-полей данного объекта их конструкторами по умолчанию). Кроме того, в любом классе есть конструктор копирования и деструктор по умолчанию. |
Автор: Phantom 26.8.2003, 22:07 |
Я имел ввиду явно определенный и описанный конструктор по умолчанию, которого нет в примере HexoGenus, без него нельзя создать динамический массив обьектов. |
Автор: mr.DUDA 26.8.2003, 22:11 | ||
Phantom, ты мог бы привести пример такого динамического массива (ну или контейнера, если ты это имеешь ввиду), в котором нельзя было бы хранить, например, объекты такого класса:
|
Автор: Phantom 26.8.2003, 22:22 | ||
Такой код по моему мнению (и мнению моего компилятора ![]() |
Автор: mr.DUDA 26.8.2003, 22:30 | ||||
А вот мой - спокойно компилит (MSVC 6.0 SP4):
|
Автор: Phantom 26.8.2003, 22:42 |
Все верно, моя ошибка, зря вообще спорил. ![]() |
Автор: TaTaP 27.8.2003, 04:59 |
mr.DUDA ты неправ - в классе по умолчанию конструктор без параметров существует лишь тогда, когда в классе вообще нет никаких конструкторов, и у членов класса и базовых классов существуют конструкторы по умолчанию (либо также нет никаких конструкторов). Если это не так - компилятор ругается... Теперь про проблему gray_k - можно либо перегрузить в классе оператор new, либо писать конструктор по умолчанию. В MSDN прямо так и сказано - стандартным оператором new можно создавать динамические массивы объектов, только если класс имеет конструктор по умолчанию... |
Автор: RAN 27.8.2003, 07:23 |
Да, TaTaP. Если создать конструктор в классе, то конструктор по-умолчанию тоже надо писать самому. А автору темы можно предложить ещё использовать параметры по-умолчанию. CMyClass(int par1 = <значение по-умолчанию> ... ) |
Автор: mr.DUDA 27.8.2003, 09:46 | ||||
Да, народ, вы правы. Каюсь.
ЗЫ, а еще инициализировать поля объекта можно не передавая параметров в конструктор, так:
|
Автор: Dan. 11.7.2004, 19:26 |
Ребят, можете привести готовый код для динамического создания объектов BC++B? Я в Сях пока не очень хорошо разбираюсь ![]() |
Автор: bel_nikita 11.7.2004, 21:40 |
gray_k А по чему бы не создать массив указателей на объекты??? И про конструктор копий в таком случае можно забыть. Почти ![]() Или смысл в том, чтоб объекты в памяти хранились последовательно? Но зачем? Мне кажется лучше хранить указатели на объекты. |