Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2008, 13:47   #1
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию массив объектов с конструктором копии

Здравствуйте. возникла следующая проблемка. имеется класс А:
Код:
class A
{
...
public:
  A(int i);
...
}
имеется класс B:
Код:
class B:
{
  ...
  A items[10];
  ...
}
так вот как указать что для этих 10 объектов нужно вызвать конструктор копии с параметром 5 например.
если был бы отдельный объект, то вроде как просто реализация конструктора В была бы:
Код:
B(): item(5)
{

}
а вот с массивом как быть?
pu4koff вне форума Ответить с цитированием
Старый 18.06.2008, 13:57   #2
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

Когда надо сконструировать множество объектов (не важно, статически или динамически), то всегда вызывается конструктор по умолчанию (без параметров). Об этом говорится в стандарте.
Поэтому придется инициализировать объекты после конструирования. Или же использовать глобальную переменную, но это не есть хорошо.
filosof_x86 вне форума Ответить с цитированием
Старый 18.06.2008, 14:07   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

спасибо. класс А просто не мною разработан и у него отсутствует конструктор по умолчанию
pu4koff вне форума Ответить с цитированием
Старый 18.06.2008, 14:10   #4
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

Если он не определен явно, значит компилятор создаст свой, пустой. Инициализацию после проведи и все.
filosof_x86 вне форума Ответить с цитированием
Старый 18.06.2008, 14:29   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

а низя никак. А - это QSemaphore из Qt. и там вроде низя никак кроме конструктора указать максимальное кол-во "посетителей". или лыжи не едут как всегда
pu4koff вне форума Ответить с цитированием
Старый 18.06.2008, 15:39   #6
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

Можно определить еще один класс, производный от QSemaphore. В этом новом классе определить конструктор по умолчанию, который в конструктор QSemaphore будет передавать нужно число. Примерно, как это будет выглядеть:

Код:
#include <iostream>

class Semaphore { // по сути, это QSemaphore
public:
  Semaphore(int maxcount)
  {
    std::cout << "Semaphore constructor, maxcount = " << maxcount << std::endl;
  }
  virtual ~Semaphore() {}

private:
  Semaphore() {} // сделаем запрет на использование конструктора по умолчанию
};

class MySemaphore: public Semaphore {
public:
  MySemaphore(): Semaphore(5)
  {
    std::cout << "MySemaphore constructor" << std::endl;
  }
  virtual ~MySemaphore() {}
};

class B {
private:
  MySemaphore items[10];
};

int main()    
{  
  B b;
  return 0;  
}
filosof_x86 вне форума Ответить с цитированием
Старый 18.06.2008, 17:33   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

спасибо. посмотрим. может просто создам массив указателей и в конструкторе уласса B в цикле создам уже нужные объекты
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Много объектов. Манжосов Денис :) Общие вопросы Delphi 5 04.09.2008 22:34
Как в Adobe Reader 8 отключить сохранение копии? Mikalai Софт 0 14.03.2008 14:48
Прикрепление объектов фЁдОр Помощь студентам 20 10.09.2007 10:48
Мерцание объектов Chaos-Delta Мультимедиа в Delphi 4 02.07.2007 13:59
Конструктор объектов Yoger Общие вопросы Delphi 10 20.04.2007 12:45