Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с конструктором... 
:(
    Опции темы
matrlx
  Дата 31.5.2006, 04:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 20.9.2005

Репутация: нет
Всего: 0



 smile 
Ребята, помогите с вызовом конструктора с параметрами.
Есть класс Самолетов.
Я создаю массив классов строкой
типа AirPlanes air[10];

Но надо вызвать конструктор с параметрами ... т.е. 
в случае без массива надо написать AirPlanes air(parametrs);

Но в случае массива как написать надо?!
AirPlanes air[10](parametrs); не работает! smile 
PM MAIL   Вверх
Earnest
Дата 31.5.2006, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Нет такой синтаксической конструкции, которая позволяет объявить массив объектов, не имеющих конструктора по умолчанию, т.е. без параметров. 
Возможных выходов несколько:
1) Объявить в конструкторе значения параметров по-умолчанию, тогда именно они будут использованы при создании элементов массива:
Код

   class AirPlan
   {
   public:
       AirPlan (int a=1,double b=3.14) {/*... */ }
   };
   AirPlan a[100];   // будет создано 100 самолетов с параметрами a=1 и b = 3.14

2) Использовать не массив, а вектор (std::vector), тогда код может выглядеть следующим образом:
Код

   class AirPlan
   {
   public:
       AirPlan (int a,double b) {/*... */ }
   };
   std::vector<AirPlan> a(100,AirPlan(1,3.14));

3) Инициализация не в конструкторе, а в функции типа Init...

Наверное, есть и другие варианты. Не так давно в форуме уже обсуждался подобный вопрос, поищи.         

Это сообщение отредактировал(а) Earnest - 31.5.2006, 06:57


--------------------
...
PM   Вверх
ptr
Дата 31.5.2006, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Или ещё можно AirPlan a[10]={ AirPlan(int, int),.....};  

Это сообщение отредактировал(а) ptr - 31.5.2006, 07:42


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
Earnest
Дата 31.5.2006, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Да, так тоже можно, хотя не все компиляторы позволяют так написать для автоматического объекта. Кроме того, если самолоетов не 10, а 100 или 1000 ... копи-паст сломается раньше ... smile  


--------------------
...
PM   Вверх
DeadSoul
Дата 31.5.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



 smile 
Цитата(Earnest @  31.5.2006,  07:58 Найти цитируемый пост)
Да, так тоже можно, хотя не все компиляторы позволяют так написать для автоматического объекта. Кроме того, если самолоетов не 10, а 100 или 1000 ... копи-паст сломается раньше ... 

На аутсорс индусам! 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
likehood
Дата 31.5.2006, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Можно еще так (с помощью локального класса):
Код

struct A {
    A(int i): i(i) { };
    int i;
};

int main()
{
         // локальный класс не может работать со стековыми объектами, поэтому используем static
    static int init[10] = {1, 2, 3, 4, 5, 666, 7, 8, 9, 10};
    static int n = 0;
         // создаем локальный класс A_
    struct A_ : public A {
        A_() : A(init[n++]) { }
    };
    A_ arr[10]; // можно работать как с A arr[10];
    for (int i=0; i<10; i++)
        cout << arr[i].i << " ";
}
 
PM MAIL   Вверх
matrlx
Дата 31.5.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 20.9.2005

Репутация: нет
Всего: 0



Спасибо вам! smile  
PM MAIL   Вверх
SaDFromSpb
Дата 31.5.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 5.4.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 3



Earnest,  а что такое "автоматический объект"? 


--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
likehood
Дата 31.5.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Автоматический объект - иначе стековый объект - нестатический объект, создаваемый при вызове функции и уничтожаемый при выходе из нее. По-умолчанию все объекты в  функции и так являются автоматическими, хотя теоретически можно использовать ключевое слово auto. 
PM MAIL   Вверх
SaDFromSpb
Дата 31.5.2006, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 5.4.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 3



baronp, то есть неавтоматические объекты - это те, о создании и удалении которых мы должны сами заботиться (располагающиеся в динамической памяти)?  

Это сообщение отредактировал(а) SaDFromSpb - 31.5.2006, 19:11


--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
MAKCim
Дата 31.5.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

то есть неавтоматические объекты - это те, о создании и удалении которых мы должны сами заботиться (располагающиеся в динамической памяти

вообщем да (кроме статических объектов - располагаются не в стеке, но заботиться об освобождении памяти не надо) 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.