Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 25

Массив из конструкторов

12.05.2010, 13:28. Показов 3670. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как создать массив из конструкторов определенного класса.

Приведу пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static int num1 = 0;
 
...
 
Example::Example() // конструктор
{
   // инициализация элементов-данных, зависящих от num1
   ...
 
   // счетчик
   num1++;
}
 
...
 
Example* exmpl=new Example[exmpl_size]; // создаю exmpl_size объектов класса Example
 
...
 
exmpl[25].paint(); // доступ
Есть ли какой более удобный способ без конструктора по умолчанию и счетчика?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.05.2010, 13:28
Ответы с готовыми решениями:

запуск конструкторов
class String { private: strCount* psc; public: String() //...

Наследование конструкторов
Здрасти. Такая проблема. У меня есть классы с таким наследованием: KIERUNEK-->PRZEDMIOT-->OCENA<--STUDENT Вот конструкторы класса...

Перегрузка конструкторов
Написал прогу - в зависимости от ввода даты печатает ее в определенном формате: файл date.h #ifndef DATE1_H #define DATE1_H class...

27
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
12.05.2010, 17:30
Студворк — интернет-сервис помощи студентам
Самый лучший, на мой взгляд, способ я уже написал.
Цитата Сообщение от Black Fregat Посмотреть сообщение
сделать какой-нибудь метод типа MyClass::Init(int N)
Приведенный способ с вектором ничем принципиально не отличается от способа с массивом и присваиванием - ну разве тем, что вместо присваивания по умолчанию будет вызываться конструктор копирования по умолчанию. Те же, только в профиль.
1
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
12.05.2010, 18:02
Цитата Сообщение от sphere Посмотреть сообщение
Можно вопрос, а что значит "std::" перед "vector<MyClass> mas;" пространство имен?
оно самое
1
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
12.05.2010, 19:09
Инициализация массива объектов с помощью in-place new
C++
1
2
3
MyClass *array = malloc(size*sizeof(MyClass));
for(int i=0; i<size; ++i)
    new (array+i) MyClass(2.5f, "My Classy object");
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
12.05.2010, 19:54
Только тогда и удалять придется с помощью in-place delete...
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
13.05.2010, 15:33
А если такой вариант?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class MyClass{
       int a;
  public:
       MyClass():a(0){}
       MyClass(int b):a(b){};
}
 
int main(void)
{
      MyClass *mas[10000];
      //или 
      //MyClass **mas = new MyClass * [10000];
 
      for(int l=0;l<10000;l++)
             mas[l] = new MyClass(l);
      for(int l=0;l<10000;l++)
              delete mas[l];
      //delete[] mas;
      return 0;
}
1
1 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 25
13.05.2010, 16:59  [ТС]
Цитата Сообщение от Black Fregat Посмотреть сообщение
Самый лучший, на мой взгляд, способ я уже написал.

сделать какой-нибудь метод типа MyClass::Init(int N)
Проблема в том, что если объектов очень много, то сначала должен пройтись цикл, чтобы создать объекты, а потом еще один цикл, чтобы их инициализировать. Вопрос стоял в том, чтобы сделать и то, и то за один раз.

Добавлено через 2 минуты
Цитата Сообщение от uggway Посмотреть сообщение
А если такой вариант?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class MyClass{
       int a;
  public:
       MyClass():a(0){}
       MyClass(int b):a(b){};
}
 
int main(void)
{
      MyClass *mas[10000];
      //или 
      //MyClass **mas = new MyClass * [10000];
 
      for(int l=0;l<10000;l++)
             mas[l] = new MyClass(l);
 
      for(int l=0;l<10000;l++)
              delete mas[l];
      //delete[] mas;
      return 0;
}
А вот такое предложение кажется красивым

Добавлено через 31 минуту
Цитата Сообщение от sphere Посмотреть сообщение
А вот такое предложение кажется красивым
а нет, здесь тоже сначала создание, а потом инициализаия.
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
13.05.2010, 19:06
Цитата Сообщение от CheshireCat Посмотреть сообщение
Только тогда и удалять придется с помощью in-place delete
Удалять-то не придётся, весь массив освобождается одним махом. Но вот если объекты уничтожаются нетривиально, надо будет вызывать деструкторы, причём явно.
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
14.05.2010, 08:43
Цитата Сообщение от sphere Посмотреть сообщение
а нет, здесь тоже сначала создание, а потом инициализаия.
Здесь инициализация происходит при создании объекта посредством вызова конструктора MyClass(int b):a(b){};.
C++
1
mas[l] = new MyClass(l);
До создания объекта создается массив указателей на объекты.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.05.2010, 08:43

вызовы конструкторов
обьясните вызов конструторов #include &lt;iostream&gt; using namespace std; class ar { int *p; int size; public:

Наследование конструкторов
Здравствуйте, мне нужно что бы player наследовал конструктор от aobject class aobject { public: aobject(int xx,int yy,int** mm)...

Виды конструкторов
Какие конструкторы существуют в С++? Инфу с вики читал, но почему то все равно ответ не верен. Варианты ответа: 1) Копирования ...

Перегрузка конструкторов
Добрый день знатоки С++ возник вопрос Код этой программы компилируется в CodeBlocks а на VirtualBox не компилируется , объясните...

Виды конструкторов
Допустим, я создал класс. В нём - три конструктора. class checker { int number; int x; int y; public:


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru