|
4 / 4 / 1
Регистрация: 17.12.2015
Сообщений: 119
|
|
Научить метод принимать в качестве аргумента объект своего класса и дочерних классов09.07.2016, 17:40. Показов 12348. Ответов 14
Метки нет (Все метки)
Как научить метод принимать в качестве аргумента объект своего класса и дочерних классов? Как их передавать при вызове метода?
0
|
|
| 09.07.2016, 17:40 | |
|
Ответы с готовыми решениями:
14
Принимать в качестве аргумента шаблона только потомков определенного класса Указатель на метод класса в качестве аргумента метода класса Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра? |
|
257 / 234 / 185
Регистрация: 02.04.2016
Сообщений: 898
|
||||||
| 09.07.2016, 17:44 | ||||||
|
по ссылке, если это то, что я подумал.
0
|
||||||
|
4 / 4 / 1
Регистрация: 17.12.2015
Сообщений: 119
|
|
| 09.07.2016, 20:36 [ТС] | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 09.07.2016
Сообщений: 5
|
|||||||||||||
| 09.07.2016, 21:55 | |||||||||||||
|
Mehod (class a) - будет сделана локальная копия объекта и её изменение не будет влиять на объект который был передан в этой функции. А вообще наследники родительского класса приобретают все свойства и методы родительского класса. И объект производного класса можно смело передавать в метод который принимает ссылку на базовый класс.
Так же можно сделать метод виртуальным и переопределить его в наследниках. Он станет полиморфным при вызове через указатель базового класса. Вариантов много все зависит от того что конкретно надо Добавлено через 14 минут
0
|
|||||||||||||
|
Заблокирован
|
||||||||
| 09.07.2016, 21:59 | ||||||||
Не по теме: Добавлено через 3 минуты
0
|
||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 09.07.2016, 22:40 | ||
|
0
|
||
| 10.07.2016, 08:39 | |
|
0
|
|
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
|
| 10.07.2016, 10:05 | |
|
Unknownx, в общем случае попытка выяснить тип объекта по ссылке на базовый класс говорит о каких-то проблемах в архитектуре. Идея полиморфизма заключается в том, что в наследниках класса находится код, который привязан к типу этого наследника и делает в соответствии со своим специфическим знанием что-то отличное от других наследников. При этом код, который использует указатель/ссылку на базовый класс должен работать с ним как с целостной сущностью и ни в коем случае НЕ должен начинать зависеть от того, какой на самом деле наследник базового класса был проброшен при вызове, а наследник должен реализовывать функциональность в соответсвии с заявленной в базовом классе (принцип подстановки Лисков (LSP из SOLID). Если говорить о некоторых более частных случаях, скажем в виде исключения - то может использоваться либо двойная диспетчеризация - когда с одной стороны используется полиморфизм для обработки вызова, с другой стороны вызываются разные перегрузки методов исходя из типа аргумента (Таким образом устроен boost::static_visitor для boost::variant). Наконец если используются техники типа type erasure и по какой-то причине понадобилось знать какой тип действительно находится за концепцией any/type_erasure/variant могут использоваться либо подходы с кастами ( в том числе специфические для данного типа, а не dynamic_cast, например как в any_cast). Ну и самый прямолобый вариант - просто иметь метод, который возвращает тип хранимого в базовом классе наследника (как например реализовано в QVariant::type). Если Вы приведете конкретный пример задачи, решение которой Вас интересует с точки зрения использования полиморфизма, мы могли бы подумать над тем, можно ли найти её решение без попыток выяснения типа наследника в пользователе базового класса.
0
|
|
|
Заблокирован
|
||
| 10.07.2016, 10:48 | ||
|
0
|
||
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
|
| 10.07.2016, 10:57 | |
|
Unknownx, Не смотря на Ваш, мягко говоря, своеобразный способ общения, мне было бы интересно узнать действительно ли Ваше положение не удастся спасти никак кроме как через выяснение типа наследника. Вы можете привести минимальный пример кода, который бы воспроизводил ситуацию? (Вот с теми же канвами) потому-что из Ваших слов мне не понятно о каких "особенностях" в канвах идет речь, и как они при этом используются в рендере. (Если у вас есть opensource проект иллюстрирующий проблему - я могу взглянуть и на него).
0
|
|
| 10.07.2016, 11:07 | |
|
Не по теме: Melg, очень много проприетарного кода. Лучше останемся каждый при своём мнении.
0
|
|
| 10.07.2016, 11:21 | |
|
Не по теме: Unknownx, тогда Ваши заявления мягко говоря голословны. В зависимости от того в чем заключались эти различия между канвами - сигнатуры методов, названия методов, наличие дополнительных методов настроек, разное поведение одних и тех же методов, и т.д. и тем как именно и для чего использует их рендер - по-разному бы звучал ответ на тему того как именно можно решать такую задачу с/без использованием знаний о типе конвы. Вопрос про #ifdef-ы к полиморфизму имеет чуть больше чем нисколько отношения, поскольку директивы препроцессора вообще на другом этапе выполняются. В общем случае я бы предпочел видеть разделенные реализации, которые тем или иным образом (pimpl, переопределение символов, подгрузка отдельной либы, условная компиляция разных единиц трансляции под платформу) объединяются под общим интерфейсом (классов/методов/функций) c которым везде в системе можно работать единым образом БЕЗ необходимости дописывать платформозависимый код в вышестоящие классы-пользователи. Возможно между платформозависимым кодом и пользователями в Вашем случае отсутствует необходимый слой адаптеров, который бы с одной стороны работал непосредственно со знанием конкретной платформы, с другой стороны - пользователям предоставлял унифицированный интерфейс с единообразным поведением под всеми платформами.
0
|
|
| 10.07.2016, 11:57 | ||
|
Не по теме:
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 10.07.2016, 12:20 | ||
|
0
|
||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 10.07.2016, 16:41 | ||
0
|
||
| 10.07.2016, 16:41 | |
|
Помогаю со студенческими работами здесь
15
Использование метода класса как функции в качестве типизированного аргумента в методе класса
Конструктор, принимающий в качестве аргумента ссылку на объект, всё портит Передача класса в качестве аргумента Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|