|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
|
Сравнение производных классов29.06.2014, 19:15. Показов 5632. Ответов 24
Метки нет (Все метки)
Друзья!
Пусть у меня есть базовый класс S. У него есть два наследника A и B. Как мне скидывать, например в set, указатели (шаредпэтэры например) на объекты классов A и B так, чтобы сначала шли объеты класса A, затем объекты класса B? Понятно как сравнивать объекты класса только A или только B между собой, а как сравнивать объекты классов A и B между собой? Потенциально может быть и так что у A и B тоже будут наследники, например Aa, Ab, Ba и Bb. И тогда надо будет сравнивать все объекты между собой (S, A, B, Aa, Ab, Ba, Bb). Как такое делается? Добавлено через 11 минут У мея есть два варианта: 1. В класс S добавить enum, и в зависимости что за объект объявляем, выставлять IDшник этого объекта. таким образом у каждого обекта будет свой IDшник (возможно они будут повторяться, если например будет несколько объектов одного класса). Ну собственно сравнивать объекты по этому ID. Вроде норм, но кажется что этот ID это какой-то костыль ![]() 2. Сделать один супер контейнер, в котором указатели на контейнеры, каждый из которых хранит объекты только своего типа. Этот вариант мне нравится - не нужно хранить никакие ID и прочую "лишнюю" инфу, но вот как супер контейнер узнает объект какого типа ему передали и в какой контейнер его пушнуть? собственно это такой же вопрос как и в первом посте.
0
|
|
| 29.06.2014, 19:15 | |
|
Ответы с готовыми решениями:
24
Наследование классов. Копирование производных классов
Файлы и объекты производных классов |
|
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
|
|
| 29.06.2014, 19:24 | |
|
привести объект производного класса к базовому, сравнить приведенные объекты. dinamyc_cast вам в помощь
0
|
|
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
|
| 29.06.2014, 19:35 [ТС] | |
|
Хорошо, а если я хочу в будущем менять порядок следования объектов в контейнере?
Как я понял, вы предлагаете любой указатель приводить к указателю на базовый класс. Ок, привел. А как их потом сравнивать? Как понять что объект ЭТОГО типа "меньше" объекта вот ЭТОГО типа?
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 29.06.2014, 19:37 | |
|
А можно чуть больше контекста? Почему было принято решение именно так делать?
PS Мне как-то приходилось поддерживать гетерогенную очередь с приоритетами... Отделался добавлением в каждый класс свойства "Приоритет".
1
|
|
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
||
| 29.06.2014, 19:43 [ТС] | ||
|
0x10, ну собственно ваш способ это и есть мой первый метод, верно?
0
|
||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 29.06.2014, 19:59 | |
|
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||
| 29.06.2014, 20:07 | ||
|
1
|
||
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
||||||
| 29.06.2014, 20:08 [ТС] | ||||||
че нить такое?
0
|
||||||
|
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
|
||||||||||||
| 29.06.2014, 20:09 | ||||||||||||
|
Посмотрите:
1
|
||||||||||||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 29.06.2014, 20:11 | |
|
Kukurudza, ну ок. Только я бы еще этот приоритет сделал бы static - к чему дублировать его в каждом объекте.
1
|
|
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
|
| 29.06.2014, 20:13 [ТС] | |
|
Vladimir., ваш метод это собственно такой же что и мой. только один из них более наглядный (в зависимости от опыта кодера
)0x10, ну да, разумеется. всем плюсанул. спасибо.
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 29.06.2014, 20:13 | |
|
Vladimir., ну это хак, нецелевое использование возможностей языка. Нет гарантий, что при использовании другого компилятора будет полностью аналогично.
0
|
|
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||||||
| 29.06.2014, 20:21 | ||||||
Сообщение было отмечено Kukurudza как решение
Решение
0
|
||||||
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
|
| 29.06.2014, 20:22 [ТС] | |
|
Voivoid, пожалуй, вы лучший
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||||||
| 29.06.2014, 20:24 | ||||||
|
Voivoid, у меня когда-то примерно так и было реализовано) А потом совесть замучила за то, что везде дублируется функция, отличающаяся не поведением, а только данными.
В итоге получилось что-то такое:
1
|
||||||
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
|
| 29.06.2014, 20:27 [ТС] | |
|
0x10, хитрец
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||
| 29.06.2014, 20:29 | |||||||
|
Не по теме: 0x10, а чего компаратор не ввиде лямбды, раз уж C++11? :)
0
|
|||||||
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
|
| 29.06.2014, 20:31 [ТС] | |
|
Tulosba, а что не так?
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 29.06.2014, 20:31 | |
|
Tulosba, все можно - главное, идея показана)
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||
| 29.06.2014, 20:33 | ||||
|
0
|
||||
| 29.06.2014, 20:33 | |
|
Помогаю со студенческими работами здесь
20
Массив объектов разных производных классов
Конструктор по умолчанию для производных классов
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Конвертировать закладки 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.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|