Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
#1

Групповая обработка разнотиповых объектов? - C++

16.01.2013, 21:27. Просмотров 272. Ответов 6
Метки нет (Все метки)

Есть шаблон исходных объектов:
C++
1
2
3
4
5
6
7
8
template <class Type, cint NumberDimension> class MyArray
{
public:
 
Type* Array;
 
void MyFunc();
}
Надо написать объект ("Manager"), который будет сохранять набор разнотиповых объектов в себе и потом массово их обрабатывать:

C++
1
2
3
4
5
6
7
8
9
10
MyArray<double> MyArray1;
...
MyArray<int> MyArrayN;
 
 
Manager.Add(MyArray1);
...
Manager.Add(MyArrayN);
 
Manager.MyFunc_ForAll();
Как это сделать самостоятельно без STL?

Можно определить абстрактный класс и с функцией "MyFunc" и от него унаследовать объект "MyArray" (реализовав функцию "MyFunc"). Но у Страуструпа написано, что абстрактные функции замедляют работу программы. Хотелось бы остаться с хорошей производительностью.

Как выкрутиться?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2013, 21:27     Групповая обработка разнотиповых объектов?
Посмотрите здесь:

В программе реализовать возможность записи объектов в файл и чтения объектов из файла - C++
Добрый день, помогите, пожалуйста! У меня есть программа: #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; class...

Сортировка объектов - C++
Вечер добрый, хочу отсортировать объекты по имени, правильно ли я реализовал эту сортировку?:sorry: #include &quot;stdafx.h&quot; #include...

Дерево объектов - C++
Есть задание: Массив из n элементов, каждый из которых уникальный экземпляр, включающий как минимум 3 атрибута. Необходимо произвести отбор...

массив объектов - C++
добрый вечер всем. Возникла такая проблема - необходимо создать массив деков символов. Я хочу создать пустой объект - нулевого размера. а...

Движение объектов - C++
Здравствуйте друзья, мне нужна помощь в написании программы C++ Нужно сделать объект, который будет двигаться по экрану: Движение под...

Массивы объектов - C++
у меня в классе имеется конструктор с параметрами. как мне создать массив объектов, вызывая при этом этот конструктор? к примеру Neuron...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
16.01.2013, 21:39     Групповая обработка разнотиповых объектов? #2
сделать просто и понятно. если знаете как с абстрактными функциями - значит с ними.
сделать корректно работающую вещь.
измерить производительность, сделать выводы.
если производительность действительно просела именно из-за принятого решения - переделать.
заранее думать об оптимизации и городить огород - зло.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
16.01.2013, 21:41     Групповая обработка разнотиповых объектов? #3
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Как выкрутиться?
Вот так и выкрутиться, как вы написали. Виртуальные функции замедляют каждый вызов функции ровно на одну косвенную адресацию, это нисколечки не страшно.
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
17.01.2013, 12:34  [ТС]     Групповая обработка разнотиповых объектов? #4
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Вот так и выкрутиться, как вы написали. Виртуальные функции замедляют каждый вызов функции ровно на одну косвенную адресацию, это нисколечки не страшно.
Все-таки использование динамического полиморфизма мне кажется излишне сложным. Ведь он задумывался как способ выбора функции (из базового или производного класса?) на этапе выполнения программы. А у нас 100% известно, что функция должна использоваться из производного класса.

Думаю лучше в объекте "Manager" создать массивы под каждый тип данных и при добавлении объектов складировать их в соответствующие им массивы. А при массовом выполнении функции "MyFunc" выполнять ее отдельно для каждого массива (объектов одного типа данных).
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.01.2013, 12:48     Групповая обработка разнотиповых объектов? #5
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Все-таки использование динамического полиморфизма мне кажется излишне сложным. Ведь он задумывался как способ выбора функции (из базового или производного класса?) на этапе выполнения программы. А у нас 100% известно, что функция должна использоваться из производного класса.
Для выбора функции одного из производных классов. Того, который на самом деле является производным классом объекта, которым мы оперируем как объектом базового класса.
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Надо написать объект ("Manager"), который будет сохранять набор разнотиповых объектов в себе и потом массово их обрабатывать
У вас вот разнотипные объекты производных классов. И вы ими оперируете как объектами базового класса. Но с одним исключением: при вызове MyFunc() мы должны взять MyFunc() из соответствующего производного класса.

Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Думаю лучше в объекте "Manager" создать массивы под каждый тип данных и при добавлении объектов складировать их в соответствующие им массивы. А при массовом выполнении функции "MyFunc" выполнять ее отдельно для каждого массива (объектов одного типа данных).
Это типа не излише сложно — на каждый производный класс ещё один массив и ещё один метод, чтобы объект добавился в правильный массив? Не слишком ли много геморроя получает менеджер из-за проблем подчинённых массивов? Ведь это их проблема — какую MyFunc() вызвать, лишь бы обработка была правильная.
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
17.01.2013, 13:08  [ТС]     Групповая обработка разнотиповых объектов? #6
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Для выбора функции одного из производных классов. Того, который на самом деле является производным классом объекта, которым мы оперируем как объектом базового класса.
Полностью согласен. Но в моем частном случае вся разница производных классов сводится только к разному типу хранящихся значений. Функция для них написана единая, поэтому выбора как-такового не происходит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2013, 13:14     Групповая обработка разнотиповых объектов?
Еще ссылки по теме:

массив объектов - C++
Почему у меня так много объектов? Должно быть два, а конструктор вызывается n*n раз. Почему? #include &lt;iostream&gt; using namespace...

Массив объектов - C++
При решении задачи необходимо, без использования STL, описать класс, который используется для представления элементов а) массива с...

Поиск объектов - C++
Дaны чeтырe oбъeктa, oписывaeмыe рaзным чиcлoм пaрaмeтрoв. Рacпoлoжeниe пaрaмeтрoв нeвaжнo. Рeaлизoвaть функцию, дeлaющую пoиск...

Массив объектов - C++
Можно так написать? class A {бла-бла-бла} void main() { int x=3; A *arr = new A; }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.01.2013, 13:14     Групповая обработка разнотиповых объектов? #7
Вот только, к сожалению, для компилятора MyArray<int> и MyArray<double> — это совершенно разные типы, которые ничего не связывает. У них вполне (технически) могут быть разные поля, разные методы и наследоваться они могут от разных базовых классов.
Yandex
Объявления
17.01.2013, 13:14     Групповая обработка разнотиповых объектов?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru