1 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 25
|
||||||
1 | ||||||
Массив из конструкторов12.05.2010, 13:28. Показов 2602. Ответов 27
Метки нет (Все метки)
Подскажите как создать массив из конструкторов определенного класса.
Приведу пример:
0
|
12.05.2010, 13:28 | |
Ответы с готовыми решениями:
27
запуск конструкторов Наследование конструкторов Перегрузка конструкторов вызовы конструкторов |
Ignat
|
12.05.2010, 14:04
#2
|
Не по теме:
0
|
1 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 25
|
||||||
12.05.2010, 14:18 [ТС] | 3 | |||||
Подскажите как создать массив из конструкторов определенного класса. Есть ли какой более удобный способ без конструктора по умолчанию и счетчика?
Сначала задать конструктор:
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
||||||
12.05.2010, 14:24 | 4 | |||||
Такой пример пойдет
1
|
1 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 25
|
||||||
12.05.2010, 14:40 [ТС] | 5 | |||||
а можно пояснить запись:
а если объектов класса 100000? Добавлено через 8 минут Я правильно понимаю запись?
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
12.05.2010, 14:51 | 6 |
не просто со стандартными типами , а работаешь с собственными типами объектов. Про инициализацию до тела конструктора можешь почитать в литературе по C++, там еще важные моменты есть, которые мне объяснять неохото. В данном примере суть сильно не изменить потому как используются обычные арифметические типы, Можешь инициализировать и в теле конструктора. MyClass(){a=0;} MyClass(int b){a = b;} Добавлено через 2 минуты Инициализация до тела используется также: для инициализации ссылок и констант объекта класса.
2
|
1 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 25
|
||||||
12.05.2010, 15:12 [ТС] | 7 | |||||
Я правильно понимаю, что это сработает:
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
12.05.2010, 15:15 | 8 |
Вызывается операция присваивания надеюсь вам это о чем нибудь говорит.
Добавлено через 36 секунд И то по идеи должна быть ошибка потому как такой операции присваивания по умолчанию нет.
0
|
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
||||||
12.05.2010, 15:32 | 9 | |||||
Сообщение было отмечено как решение
Решение
Более того, сработает даже так:
0
|
1 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 25
|
|
12.05.2010, 15:34 [ТС] | 10 |
т.е. я должен еще сделать перегрузку оператора = , чтобы a=b?
Добавлено через 1 минуту Как инициализировать очень большое число объектов через цикл?
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
||||||
12.05.2010, 15:42 | 11 | |||||
sphere:
А что вы собственно хотите сделать, если вы изучаете язык, почитайте по лучше соответствующие книги и вопросы ставьте по-человечески, я до сих пор не могу понять его смысл. Что бы выполнить что вы хотите нужно сделать следующее, реализовать перегруженную версию операции присваивания и все. Пример ниже.
Black Fregat: Перегрузку конструктор показал. +1 Добавлено через 5 минут Через цикл можешь проделать, пример выше. Только ты будешь проделывать уже не инициализацию, а присваивание для каждого объекта из массива.
1
|
1 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 25
|
||||||
12.05.2010, 15:44 [ТС] | 12 | |||||
Да, может я некорректно выразился. Мне нужно создать очень большое число объектов моего класса, например, 100000. Кажется логичным решить эту задачу, создав массив из объектов. Далее все упирается как? Как я понял, можно перегрузить операцию = для моего класса и создать массив из объектов через цикл:
0
|
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
|
12.05.2010, 15:47 | 13 |
Вот как раз присваивание по умолчанию есть, выполняется тупым копированием памяти объекта.
Вечный источник ошибок.. Вообще, с копированием объектов лучше связываться на более продвинутом этапе понимания.
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
12.05.2010, 15:51 | 14 |
И я бы не говорил про перегрузку операции присваивания, если бы не знал что стандартная уже существует. Не по теме:
2
|
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
|
12.05.2010, 15:53 | 15 |
1) Объекты в Вашем примере к моменту цикла уже созданы - с конструктором по умолчанию
2) Зачем Вам обязательно перегружать присваивание? Может, проще сделать какой-нибудь метод типа MyClass::Init(int N) - на мой взгляд, будет гораздо нагляднее, чем соображать про перегруженное присваивание
2
|
1 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 25
|
|||||||||||
12.05.2010, 16:01 [ТС] | 16 | ||||||||||
Добавлено через 2 минуты
Добавлено через 4 минуты Это далеко не самый лучший способ:
0
|
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
|
12.05.2010, 16:02 | 17 |
Ну да, эта зараза вызовет конструктор MyClass(int), сотворит временный объект, а потом будет его присваивать. Впрочем, может, и с оптимизирует - смотреть надо..
0
|
1 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 25
|
|
12.05.2010, 16:03 [ТС] | 18 |
Или реализации через внутренний счетчик (см. первый пост) - это единственно реализуемый вариант в таком случае?
0
|
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
|
||||||
12.05.2010, 16:10 | 19 | |||||
sphere, можно ещё так
1
|
1 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 25
|
|
12.05.2010, 16:20 [ТС] | 20 |
Можно вопрос, а что значит "std::" перед "vector<MyClass> mas;" пространство имен?
0
|
12.05.2010, 16:20 | |
12.05.2010, 16:20 | |
Помогаю со студенческими работами здесь
20
Наследование конструкторов Виды конструкторов Перегрузка конструкторов Виды конструкторов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |