|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.06.2013, 19:54 | #1 |
Новичок
Джуниор
Регистрация: 30.06.2013
Сообщений: 8
|
Класс-интерфейс
Есть порядка 15 классов, наследованных от одного базового полиморфного класса, и есть задача создания класса-интерфейса, который мог бы обращаться ко всем переменным и функциям этих 15 классов. Следующие имеющиеся варианты решения не подходят:
1. проверка типа каждого класса в классе-интерфейсе и дальнейшее использование каждого класса через указатель по отдельности. В этом случае код сильно разбухает. 2. использование виртуальных функций базового класса ограничено, потому что в состав 15 классов входят другие, несвязанные между собой классы. 3. библиотка boost на данном этапе не рассматривается. К существующим 15 классам со временем будут добавляться еще новые схожие классы, поэтому было бы неплохо, создав однажды класс-интерфейс, больше его не пересобирать. Код:
|
30.06.2013, 22:30 | #2 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
У Вас же инкапсуляция нарушена.
Код:
Как вариант: можно задать область видимости данных-членов всех классов как protected. Сам же класс-инерфейс поместить вниз иерархии, виртуально пронаследовав данные всех классов, находящихся выше в иерархии. Не самое лучшее решение, на мой взгляд. Еще подумаю. |
30.06.2013, 23:35 | #3 |
Новичок
Джуниор
Регистрация: 30.06.2013
Сообщений: 8
|
Указатели на классы Class1, .. Class15 - есть указатели на динамические библиотеки, которые необходимы классам Derived1, .. Derived15. Без встроенных классов Class1, .. Class15 задача была бы решена за счет виртуальных функций базового класса. В целом, можно было бы иметь контейнер с указателями на классы Derived1, .. Derived15, например map <int, Base*> drv_map, но здесь возникает сложная проблема со срезкой (slicing).
|
30.06.2013, 23:50 | #4 | |||
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Цитата:
Цитата:
Цитата:
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
|||
01.07.2013, 06:59 | #5 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Но даже если бы они были публичные: что бы изменить переменную конкретного наследника, надо как минимум знать точно, что она у него вообще есть. А для того, что бы точно знать что есть в классе, нужно знать что это за класс. |
|
01.07.2013, 09:01 | #6 | ||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
Цитата:
|
||
01.07.2013, 09:03 | #7 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
01.07.2013, 12:07 | #8 |
Новичок
Джуниор
Регистрация: 30.06.2013
Сообщений: 8
|
Задача сводится к тому, чтобы класс-интерфейс мог в зависимости от выбора пользователя обратиться к открытым переменным и открытым функциям классов Derived1, .. Derived15. Темы на форуме не было бы, если бы отсутствовали указатели на динамические библиотеки Class1, .. Class15. Класс Derived1 задумывался как одно целое с Class1 с точки зрения обработки данных.
1. Когда в класс-интерфейс передается указатель на Derived1, .. Derived15 вместе с типом класса ( например, для для класса Derived1 передаем 1, для Derived2 - 2, ...), то с помощью RTTI класс-интерфейс работает без замечаний. Правда, при этом увеличивается код, чего хотелось бы избежать. 2. При применении виртуальных функций базового класса не удается втащить классы Class1, .. Class15 в базовый класс или сослаться на них через указатель базового класса. Код:
|
01.07.2013, 13:15 | #9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
|
01.07.2013, 15:03 | #10 |
Новичок
Джуниор
Регистрация: 30.06.2013
Сообщений: 8
|
Обращение к переменным необходимо для создания универсального интерфейса к классам Derived1, .. Derived15.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Получить по ссылке на интерфейс указатель на класс в котором он реализован | LISTAT | Общие вопросы Delphi | 9 | 24.01.2013 12:06 |
Cоздать класс жидкость. определить конструкторы деструкторы и функцию печати. создать публик производный класс. (С++) | Динар Габбасов | Помощь студентам | 0 | 28.05.2012 18:44 |
Добавить класс в проект2,похожий на класс из проекта1!оба проекта есть! | xeops | C# (си шарп) | 0 | 15.05.2012 20:31 |
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. | Человек_Борща | Общие вопросы Delphi | 8 | 27.02.2012 23:24 |
разработать интерфейс для дисков - интерфейс програмный | Notformal | Помощь студентам | 0 | 01.11.2011 22:52 |