![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
Есть класс
class CMyClass { public: ... CMyClass(/*здесь набор параметров*/); } Как в программе динамически создать массив объектов такого класса? CMyClass *MyClassArray; MyClassArray = new MyClassArray[N](как бы сюда набор параметров передать) такой код ругается, оно и понятно, написал чтобы было понятно, что я хочу. Как это сделать? -------------------- С уважением. Gray. |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Ищем инфу про динамические массивы, или смотрим справку по vector.
|
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
1. можно после создания в цикле пройтись по объектам и установить их параметры
2. можно объявить CMyClass **MyClassArray, тогда это будет массив указателей на объекты, потом опять же пройтись циклом и сделать MyClassArray[c] = new CMyClass(/*здесь набор параметров*/); -------------------- qqq |
|||
|
||||
HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Максим немного некорректно объясняешь...
1. После создания уже поздно, ведь параметры передаются в конструкторе ![]() 2. **MyClassArray это еще не массив это "неинициализированный указатель на начало массива указателей" и ты начинаешь использовать этот массив не выделив под него память а это не есть гуд ![]() (Хотя остальное все достоверно ![]() Нужно так:
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Кстати это все мы создаем массивы указателей на классы ...
получается что массив классов у которых нет конструктора без параметров динамически создать нельзя ![]() (Для любителей поспорить в пустую заранее предупреждаю что под массивом классов я подразумеваю то что они расположены в памяти непосредственно друг за другом) --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
Phantom |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 25.8.2003 Репутация: нет Всего: нет |
Нельзя создать массив обьектов которые не имеют конструктора по умолчанию (без параметров) - так написано в умной книжке.
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Конструктор без параметров существует в любом классе. Если он не объявлен в явном виде, то для инициализации объекта в массиве или контейнере используется конструктор без параметров по умолчанию (который не выполняет никаких действий, кроме инициализации объектов-полей данного объекта их конструкторами по умолчанию). Кроме того, в любом классе есть конструктор копирования и деструктор по умолчанию.
-------------------- ![]() |
|||
|
||||
Phantom |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 25.8.2003 Репутация: нет Всего: нет |
Я имел ввиду явно определенный и описанный конструктор по умолчанию, которого нет в примере HexoGenus, без него нельзя создать динамический массив обьектов.
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Phantom, ты мог бы привести пример такого динамического массива (ну или контейнера, если ты это имеешь ввиду), в котором нельзя было бы хранить, например, объекты такого класса:
-------------------- ![]() |
|||
|
||||
Phantom |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 25.8.2003 Репутация: нет Всего: нет |
Такой код по моему мнению (и мнению моего компилятора ![]() |
|||
|
||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
А вот мой - спокойно компилит (MSVC 6.0 SP4):
-------------------- ![]() |
||||
|
|||||
Phantom |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 25.8.2003 Репутация: нет Всего: нет |
Все верно, моя ошибка, зря вообще спорил.
![]() |
|||
|
||||
TaTaP |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 15.10.2002 Репутация: 1 Всего: 1 |
mr.DUDA ты неправ - в классе по умолчанию конструктор без параметров существует лишь тогда, когда в классе вообще нет никаких конструкторов, и у членов класса и базовых классов существуют конструкторы по умолчанию (либо также нет никаких конструкторов). Если это не так - компилятор ругается...
Теперь про проблему gray_k - можно либо перегрузить в классе оператор new, либо писать конструктор по умолчанию. В MSDN прямо так и сказано - стандартным оператором new можно создавать динамические массивы объектов, только если класс имеет конструктор по умолчанию... Это сообщение отредактировал(а) TaTaP - 27.8.2003, 05:00 |
|||
|
||||
RAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Да, TaTaP. Если создать конструктор в классе, то конструктор по-умолчанию тоже надо писать самому. А автору темы можно предложить ещё использовать параметры по-умолчанию.
CMyClass(int par1 = <значение по-умолчанию> ... ) |
|||
|
||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Да, народ, вы правы. Каюсь.
ЗЫ, а еще инициализировать поля объекта можно не передавая параметров в конструктор, так:
-------------------- ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |