Массив классов.
От: Механик Россия  
Дата: 01.06.05 10:29
Оценка:
Необходимо преобразовать следующий код:

//CObjBase является базовым классом CObj1,CObj2,CObj3
CObj1 * o1 = new CObj1();
CObj2 * o2 = new CObj2();
CObj3 * o3 = new CObj3();


А хотелось бы получить код эквивалентный примеру выше но в следующем виде:


CObjBase* objArr[3];
for (i=0;i<3;i++)
    {
    objArr[i] = new arrOfClasses[i]();
    }


Вопрос в том как объявить массив классов arrOfClasses и как его заполнить.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re: Массив классов.
От: Кодт Россия  
Дата: 01.06.05 10:44
Оценка: +1
Здравствуйте, Механик, Вы писали:

М>Вопрос в том как объявить массив классов arrOfClasses и как его заполнить.


Тебе нужен не массив классов, а массив порождающих функций (фабрик).
Самое простое:
typedef CObjBase* (*make_object_t)(void); // тип фабрики

template<class T> // шаблон - чтобы не писать тучу однообразных функций
CObjBase* make_object(void) // сигнатура отвечает типу make_object_t
{
  return new T();
}

.....

// массив фабрик
make_object_t make_objects[3] = { make_object<CObj1>, make_object<CObj2>, make_object<CObj3> };

.....

CObjBase* objects[3];
for(i=0; i<3; ++i) objects[i] = (make_objects[i])(); // вызываем фабрики


Фабрики можно сделать и в виде объектов-функторов, и в виде классов, реализующих интерфейс (как, например, в COM)...
Перекуём баги на фичи!
Re[2]: Массив классов.
От: Механик Россия  
Дата: 01.06.05 10:50
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Механик, Вы писали:


М>>Вопрос в том как объявить массив классов arrOfClasses и как его заполнить.


К>Тебе нужен не массив классов, а массив порождающих функций (фабрик).

К>Самое простое:
К>
К>typedef CObjBase* (*make_object_t)(void); // тип фабрики

К>template<class T> // шаблон - чтобы не писать тучу однообразных функций
К>CObjBase* make_object(void) // сигнатура отвечает типу make_object_t
К>{
К>  return new T();
К>}

К>.....

К>// массив фабрик
К>make_object_t make_objects[3] = { make_object<CObj1>, make_object<CObj2>, make_object<CObj3> };

К>.....

К>CObjBase* objects[3];
К>for(i=0; i<3; ++i) objects[i] = (make_objects[i])(); // вызываем фабрики
К>


К>Фабрики можно сделать и в виде объектов-функторов, и в виде классов, реализующих интерфейс (как, например, в COM)...



Так а где бы можно было узнать про объекты-функторы...
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[3]: Массив классов.
От: Кодт Россия  
Дата: 01.06.05 10:58
Оценка: +1
Здравствуйте, Механик, Вы писали:

К>>Фабрики можно сделать и в виде объектов-функторов, и в виде классов, реализующих интерфейс (как, например, в COM)...


М>Так а где бы можно было узнать про объекты-функторы...


Чтение хороших книг по С++ (начиная с Александреску
Автор(ы): Андрей Александреску

В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно- ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.
и вверх-вниз по списку), чтение документации к boost, поиск по форуму...
Перекуём баги на фичи!
Re[4]: Массив классов.
От: Механик Россия  
Дата: 01.06.05 11:01
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Механик, Вы писали:


К>>>Фабрики можно сделать и в виде объектов-функторов, и в виде классов, реализующих интерфейс (как, например, в COM)...


М>>Так а где бы можно было узнать про объекты-функторы...


К>Чтение хороших книг по С++ (начиная с Александреску
Автор(ы): Андрей Александреску

В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно- ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.
и вверх-вниз по списку), чтение документации к boost, поиск по форуму...



У кого есть книга Александреску Александреску
Автор(ы): Андрей Александреску

В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно- ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.
в электронном виде?
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[5]: Массив классов.
От: Warturtle  
Дата: 01.06.05 12:43
Оценка: -1
Здравствуйте, Механик, Вы писали:
М>У кого есть книга Александреску Александреску
Автор(ы): Андрей Александреску

В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно- ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.
в электронном виде?

У многих, наверное, "пеши", если что=)
Re[6]: Массив классов.
От: Механик Россия  
Дата: 01.06.05 13:39
Оценка:
Здравствуйте, Warturtle, Вы писали:

W>Здравствуйте, Механик, Вы писали:

М>>У кого есть книга Александреску Александреску
Автор(ы): Андрей Александреску

В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно- ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.
в электронном виде?

W>У многих, наверное, "пеши", если что=)
Спасибо всем уже дали...
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[6]: Массив классов.
От: gok Россия  
Дата: 03.06.05 03:37
Оценка:
Здравствуйте, Warturtle, Вы писали:

W>Здравствуйте, Механик, Вы писали:

М>>У кого есть книга Александреску Александреску
Автор(ы): Андрей Александреску

В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно- ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.
в электронном виде?

W>У многих, наверное, "пеши", если что=)

Мне не дали! gokATgciDOTnet Плиииз!
gok
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.