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

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

12.05.2010, 13:28. Показов 3380. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru