187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
1 | |
Обращение к методам базового класса (есть ли подобие base/super?)28.12.2013, 11:49. Показов 9755. Ответов 12
Метки нет (Все метки)
Понятное дело, что можно обращаться к методам базового класса так: BaseClass::hisMethod();
Однако это зависимость от названия класса. Не очень это как-то. В C# есть слово base, в Java super. Есть ли подобие в C++? И как обращаться к базовому без применения его имени? Не по теме: Раньше об этом не задумывался, пока не начал производить рефакторинг кода и, было решено, переименовать класс после соединения нескольких в один. Связи остались те же (второй класс был легким, но функциональным). В итоге поубивал всё, через ctrl+F и полдня пролазил с ручным измением..
0
|
28.12.2013, 11:49 | |
Ответы с готовыми решениями:
12
Доступ к открытым методам базового класса при частном наследовании Вызов метода производного класса через обращение к методу базового класса Обращение к полю производного класса по ссылке базового класса Обращение к методам класса через указатель на экземпляр класса |
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
28.12.2013, 12:40 [ТС] | 3 |
Jupiter,
всё равно зависит от имени, хоть теперь и локализовано в одном месте
Спасибо
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
28.12.2013, 16:42 | 4 |
nexen, для переименования сущностей в некоторых средах (QtCreator например) как раз есть механизм из разряда "рефакторинг". Чтобы не возиться с ручным поиск-замена.
В шарпах и джаве нет множественного наследования, поэтому и базовый класс там один. В плюсах может быть несколько.
1
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
28.12.2013, 18:38 | 5 |
nexen, да и вообще желательно избегать переопределения "непереопределяемых" (без спец. virtual) методов. Возможно стоит пересмотреть структуру вашей иерархии.
1
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
28.12.2013, 19:37 [ТС] | 6 |
gromo, nope. Вызывать методы базового класса мне необходимо для того, чтобы вызвать его часть работы. Один из паттернов проектирования.
0
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
28.12.2013, 21:23 | 7 |
так я и не говорю, что методы базового класса не нужно вызывать. Только вот если вы не будете переопределять в производном классе методы базового класса без virtual-спецификатора, то у вас и не возникнет неоднозначности, из-за которой вы создали эту тему.
0
|
Каратель
|
||||||
28.12.2013, 23:01 | 8 | |||||
gromo,
1
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
28.12.2013, 23:56 | 9 |
Я понимаю, что в производном классе явно указывать virtual не обязательно, если вы об этом.
У ТС вопрос стоял так Потребность обращения к функциям-членам базового класса из производного по его (базового класса) имени возникает тогда, когда в производном переопределена невиртуальная функция базового класса. Я же выше писал, что То есть из-за того, что ТС переопределил такую, концептуально с точки зрения С++, "непереопределяемую" функцию, у него и возникла необходимость в поиске альтернатив base из С# ил super из Java. Поправьте, если я не прав.
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
29.12.2013, 00:26 | 10 |
производный класс переопределил виртуальную функцию. и в этой переоределенной
потребовался функционал из базового. и вот чтобы вызвать функцию базового, нужно указать явно, что зовется именно она: Base::SomeFunction (иначе рекурсивный вызов самой себя). В случае с невиртуальными функциями имеем дело с сокрытием имен. Тут тоже требуется явное указание, где ее искать, иначе либо ошибка компиляции из-за несоответствия агрументов в найденных функциях-кандидатах, либо будет вызов не той функции.
1
|
Каратель
|
|
29.12.2013, 00:32 | 11 |
с чего ты взял что она не виртуальная?
не прав. суть проблемы в том чтобы в реализации производного класса вызвать реализацию базового класса. виртуальна ли при этом функция или нет - дело десятое. да нехорошо переопределять не виртуальные функции - но проблема не в этом.
1
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
29.12.2013, 01:21 | 12 |
Это уж извините меня... Зачем нам функционал базового класса в таком случае? Мы функцию сделали виртуальной, потому что её поведение в производном классе должно отличаться от базового.
В противном случае и виртуализация не нужна... Добавлено через 3 минуты Может быть и так.
0
|
Каратель
|
|
29.12.2013, 01:34 | 13 |
2
|
29.12.2013, 01:34 | |
29.12.2013, 01:34 | |
Помогаю со студенческими работами здесь
13
Экземпляры класса. Обращение к методам и переменным класса В приведенном коде base может изменить значения членов базового класса в самом базовом классе Обращение к методам класса Обращение к методам класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
|
UserScript для подсветки кнопок языков программирования в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения:
/ / ==UserScript==
/ / @name CF_DefaultLangSelect
/ / . . .
|
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
|
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
|
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
|
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
|
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей
Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
|
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
|
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
|
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
|
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
|
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке
В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
|