C++. Массивы объектов в классах. Примеры. Массивы объектов в unmanaged и managed классах. Массив unmanaged (*) указателей на объект класса
Массивы объектов в классах. Примеры. Массивы объектов в unmanaged и managed классах. Массив unmanaged ( * ) указателей на объект класса
Содержание
- 1. Пример использования массива объектов в неуправляемом ( unmanaged ) классе
- 2. Пример использования массива объектов в управляемом ( managed ) классе
- 3. Пример использования массива unmanaged -указателей на объект класса
Поиск на других ресурсах:
1. Пример использования массива объектов в неуправляемом ( unmanaged ) классе
Задан класс CMyPoint , реализующий точку на координатной плоскости. Также задан класс CPolygon , реализующий ломаную линию. В классе CPolygon объявляется массив из 10 объектов типа CMyPoint .
Реализация класса CMyPoint :
Реализация класса CPolygon
Демонстрация использования классов CPolygon и CMyPoint в некотором методе
Как создать динамический массив из объектов класса?
Нужно создать динамический массив из объектов класса, у которого единственный конструктор принимает значение. Язык C++ без использования класса vector !
- Вопрос задан более трёх лет назад
- 27006 просмотров
Оценить 1 комментарий
- Вконтакте
И так, нашел несколько способов:
1. Если компилятор поддерживает стандарт C++ 2011
Test *objPtr = new Test[COUNT_OBJ] <5, 6, 7, 8>;
2. Реализация того, что было сказано GavriKos
Этот вариант нужно использовать с осторожностью, т.к. память выделяется но не вызываются конструктор и деструктор объекта.
3. Вариант, представленный Rsa97 в комментариях
4. На мой взгляд, самая удачная реализация с использованием Placement new. На данный способ указал Игорь Иванов
Create an array of class objs
Now I want to create array of 50 objects of class test . I cannot change class test.
Objects can be created on heap or stack.
Creating objs on stack is not possible in this case since we dont have default constructor in class
Now we may think of creating objs on heap like this..
I dont want to use malloc .Is there any other way??
If you guys can think of some more solutions , please post them.
6 Answers 6
You cannot create an array of objects, as in Foo foo [N], without a default constructor. It’s part of the language spec.
Either do:
You don’t need malloc(). You can just declare an array of pointers.
But you probably ought to have some sort of automatic RAII-type destruction attached.
OR subclass test publicly:
You can treat every TempTest object as a test object.
Note: operator=() & copy constructor are not inherited, so respecify as necessary.
Why do you need array?
Or as @j_random_hacker suggested in the comments:
Contrary to what many people believe, you can actually create an array of objects that do not have a default constructor. What you cannot do is make it use a set of arguments for all constructor invokations. You just have to initialize all elements of it. That is, you can do the following:
That will initialize all 50 elements with 1. boost::pp is used to print a 1 50 times in a row automatically.
![]()
I think that other responders are treating this question too literally.
If all you really want to do is make a «group» of 50 objects that you can treat as an array, then by far the easiest and most maintainable way of accomplishing what you’re trying to do is:
This declares a vector of 50 objects, each of which is a copy of test(1) . A vector is basically a C++ growable array; although you may not need the growability, the fact that it can be called with a 2-arg constructor that copy-constructs each element is useful here.
Массивы объектов
Объявление массива объектов ничем не отличается от объявления массива значений, имеющих элементарный тип. Отличие заключается в способе передачи параметров и вызове конструктора. Если существует конструктор без параметров, то массив объектов можно объявить так:
Однако при отсутствии конструктора без параметров это объявление приведет к ошибке. В этом случае необходимо явно передать значения конструктору при объявлении массива объектов.
Если конструктор принимает только один параметр, то при создании массива объектов можно передать список значений через запятую внутри фигурных скобок. Если перед объявлением конструктора стоит ключевое слово explicit , то этот способ использовать уже нельзя. Пример создания массива объектов и указания списка инициализации показан в листинге 13.17.
Листинг 13.17. Инициализация массива объектов
Если конструктор содержит несколько параметров или перед объявлением конструктора с одним параметром, указано ключевое слово explicit , то необходимо применять полную форму инициализации (листинг 13.18).
Листинг 13.18. Полная форма инициализации массива объектов

Учебник C++ (Qt Creator и MinGW) в формате PDF
Помощь сайту
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов