0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 3
|
|||||||||||
1 | |||||||||||
Возможно ли? Базовый класс с чисто виртуальной функцией и наследники27.12.2014, 18:17. Показов 1275. Ответов 3
Метки нет Все метки)
(
есть такая ситуация,
есть базовый класс и от него 2 наследника. У наследников есть одинаковые функции, но имеющие разный тип принимаемого и возвращаемого значения. Вопрос!!! Как описать чисто виртуальную функцию, что бы при вызове из мейна выполнялась функция, в зависимости от типа наследника
первое, что пришло на ум - это шаблоны, но не знаю как с реализацией. Первая проблема с которой столкнулся - как создать динамический объект. все что написал ниже может оказаться совершенно неверным, так как еще плохо знаком с шаблонами
0
|
|
27.12.2014, 18:17 | |
Ответы с готовыми решениями:
3
Создать абстрактный базовый класс с виртуальной функцией
В чем разница между виртуальной и чисто виртуальной функцией? Создайте базовый абстрактный класс «Товар» с чистой виртуальной функцией вывода данных |
![]() 1673 / 1045 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
27.12.2014, 18:26 | 2 |
Это какое-то новое и свежее представление об одинаковых функциях.
То есть, надо, чтобы main не зная, чью функцию вызывает, всё же сумел для разных случаев неизвестно как догадываться и передавать и принимать разные вещи? Само существование такой потребности - бессмыслица. В данном случае требуется одно из двух. Первое - сделать функцию, которая принимает и возвращает одно и то же. Наследники будут выполнять преобразования в соответствии со своими нуждами. Второе - виртуальные функции не нужны, надо работать с различающимися типами, имеющими функции с разными сигнатурами.
1
|
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 3
|
|
27.12.2014, 18:43 [ТС] | 3 |
понял, спасибо.
0
|
![]() 8725 / 4305 / 958
Регистрация: 15.11.2014
Сообщений: 9,752
|
||||||||||||||||
28.12.2014, 02:16 | 4 | |||||||||||||||
![]() Решение
Есть два варианта воможных решений.
1. Паттерн называется "система сообщений". Суть: объекты разных классов подписываются на получения сообщений определенных типов. В любой точке программы происходит "излучение сообщений в эфир". Это сообщение поймают и обработают все зарегистрировавшиеся в системе сообщений подписчики. Пример:
Известно, что настоящую шаблоно-виртуальную функцию (то бишь в статике) реализовать невозможно. Однако можно имитировать поведение:
Потому что здесь теряется проверка типов. Давайте на секунду предположим, что есть волшебный механизм, который по смыслу такой же как void*, но при этом обеспечивает проверку типов и квалификаторов. И вот тогда на сцену выходит механизм Arg:
А потом, при извлечении данных из Arg, выполняет проверку типов и квалификаторов. Таким образом получаем тот же самый void*, только безопасное.
1
|
28.12.2014, 02:16 | |
Помогаю со студенческими работами здесь
4
Создать абстрактный базовый класс Figure с виртуальной функцией Периметр. Создать производные классы Rectangle
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |