|
Заблокирован
|
||||||
Можно ли как-то в дочернем классе получить указатель родителя?09.04.2014, 17:11. Показов 23161. Ответов 40
Метки нет (Все метки)
У меня тут появилась мыслишка
![]() В любом классе есть так сказать скрытый указатель на самого себя - this, а можно ли как то получить в дочернем классе указатель на родительский класс? P.S.: без всякой явной передачи в конструктор дочернего класса указателя на базовый ... Добавлено через 12 минут ладно, опять же забейте, просто было интересно, есть ли возможность в дочернем классе получить указатель на базовый и присвоить какое то значение по этому указателю, например: (конструктор дочернего)
0
|
||||||
| 09.04.2014, 17:11 | |
|
Ответы с готовыми решениями:
40
Получить родительский класс в дочернем классе Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе |
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 10.04.2014, 09:23 | ||
|
1
|
||
|
Заблокирован
|
||
| 10.04.2014, 10:44 [ТС] | ||
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 10.04.2014, 11:12 | ||
|
1
|
||
|
Заблокирован
|
|||
| 10.04.2014, 11:35 [ТС] | |||
Я тут подумал, что ведь в дочернем классе присутствует всё барахло их всех родительских , если делать кучу подобных присоединений, получишь крутой оверхэд по памяти ... Бред в общем. Наследование - это вообще по сути такая немного бесполезная штука, которая нужна по сути только в проектах, над которыми работают сотни кодеров, чтоб типа один хрен написал класс с каким то функционалом, а другой прогер унаследовался от этого класса и получил профит в уже существующем готовом функционале предыдущего прогера, типа разделение обязанностей ... Хотя вот в C# есть полезная штука - parial классы... ну да ладно ....
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||
| 10.04.2014, 12:44 | |||||
|
Я очень много видел в инете подобных тем, где кто-то пытался обвинить язык в недостаточной полноте и отсуствии фич, однако недостаточно просто сказать "хочу вот это!". Нужно же это обосновать. Рассмотреть в комплексе с остальными возможностями языка. Как правило, заявления таких товарищей не выдерживали критики, просто хотя бы потому, что предложивший не до конца разобрался в языке. Именно поэтому стандарты принимают так долго. Это длительный процесс проверки и обсуждений со всех сторон. К примеру моя иерархия с самолетами. Она отражает конструктивные дополнения к первоначальному проекту. Задача состоит в том, чтобы имея базовую конструкцию, получить на основе ее модификации. При этом пилоты (те, кто используют класс). которые работали с базовой конструкцией не должны испытывать трудностей, работая с теми же узлами в модифицированной (интерфейс наследуется, изменяется только реализация). То есть тут понятно. вот есть парк моделей, построенных на базе одной базовой, и есть некто, кто работает с ними (механики, пилоты и т.д.). Ведь от деталей задачи зависит то, как ее надо решать. Правда ведь?
1
|
|||||
|
Заблокирован
|
|
| 10.04.2014, 15:43 [ТС] | |
|
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 10.04.2014, 17:46 | ||
|
1
|
||
|
Заблокирован
|
|
| 10.04.2014, 17:55 [ТС] | |
|
да ерунда это всё, т.к. это нужно чисто для интерфейсных абстрактных классов, которые просто жёстко устанавливают те функции, которые нужно реализовать, типа чтоб ты не забыл
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 10.04.2014, 18:41 | ||
|
Как бы ты стал решать задачу? Добавлено через 10 минут Еще пример, реальный - реализация MVC в Qt. Модель - полиморфный тип, Представление дергает интерфейсные методы, а внутри они могут хоть таблицу, хоть дерево, хоть из базы, хоть из файла, хоть из сети. Причем всегда можно написать свою модель, которая реализует то, что требуется. Полиморфизм, однако. Твой способ, как это реализовать по-другому?
1
|
||
|
Заблокирован
|
|||
| 10.04.2014, 20:57 [ТС] | |||
|
Добавлено через 59 секунд
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 10.04.2014, 21:40 | |||
|
А про обязательность абстрактных классов никто не говорил. Я говорил про полиморфизм в целом.
1
|
|||
|
Заблокирован
|
||
| 10.04.2014, 21:56 [ТС] | ||
|
P.S.: про самолёты - ноу коммент, комменты будут когда покажешь хоть пару строк кода с классами, где реально необходимо наследование и без него никак или как - но сложнее ...
0
|
||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||
| 10.04.2014, 21:58 | |||
|
Внезапно библиотеки тоже пишутся людьми. И написать более-менее универсальную библиотеку, которую можно использовать в разных приложениях, задача не всегда простая.
1
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 10.04.2014, 22:08 | ||
|
Или ты хочешь такой пример, который вообще без виртуальных функций и наследования реализован быть не может в принципе? Ну так ты это, вспомни про то, что полиморфизм - это общее понятие. Оно даже к языку не привязано - это понятие из ООП. Поэтому любая такая задача, в которой есть работа с разнородными данными одинаковым образом, - сведется к полиморфизму. Просто на С - это будет больше кода и указатели на функции в таблицах. А на С++ есть готовый инструмент в виде наследования и виртуальных вызовов. Поэтому не понято с чего бы нам, имея инструмент, городить свои if`ы и(или) таблицы вызовов. Ну и я уже привел тебе пример свой, он тебе чем-то не подошел. Но и варианта своего ты не предложил.
1
|
||
|
Заблокирован
|
||
| 10.04.2014, 22:24 [ТС] | ||
|
с утра отпишусь, но пока аргументы в пользу полиморфизма, нежели в пользу какого - то оптимального паттерна для конкретной задачи, выглядят сомнительно ....
Но Qt я всё таки знаюВот можно реально пример какой - нибуть хотя бы на двух трёх классах из пары строк, где было бы видно, что О-О да, тут с полиморфизмом реально круче, удобней и меньше строк кода ....
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||||||||||||
| 11.04.2014, 10:30 | ||||||||||||||
Добавлено через 30 минут newbie666, Ну на вот тебе пример. Основная идея в main(); С полиморфизмом.
Без полиморфизма (на самом деле он там есть, только реализованный вручную).
Модель упрощена, иначе придется реализовывать слишком много. Всего лишь демонстрация. Это нужно учитывать. Классы Pilot и характеристики внутренностей воздушных судов и т.д. не привожу, их реализация не влияет на идею. Способы взлета вертолета и самолета разные. Алгоритм, который назначает машины к взлету не обязан знать про это. Так же как и диспетчеру все равно на какие конкретные кнопки нажимает пилот, главное чтобы он соблюдал нормы полета. Первый пример устойчив к расширению парка машин, второй - нет. Это основное и главное преимущество. Код не компилируемый, предназначен для демонстрации идеи и все.
1
|
||||||||||||||
|
Заблокирован
|
|
| 11.04.2014, 10:52 [ТС] | |
|
DrOffset, не ну ты уж меня за нуба то не держи, несмотря на мой ник
![]() Что такое полиморфизм я прекрасно знаю. Но вот например, как быть с полиморфизмом, ну допустим даже с твоими флаинг машинами, если им нужно обмениваться данными между друг другом?
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 11.04.2014, 11:41 | ||
Сообщение было отмечено newbie666 как решение
РешениеНа примере же летательных апаратов: какими данными могут они обмениваться? Обычно это радиосвязь. Ну тут все просто. Есть общий канал, в каждом классе есть модуль "радиостанция". Радиостанция посылает в этот канал несколько параметров. Скажем частота, позывной адресата и сообщение. Класс "канал связи" инициирует передачу и другой летательный аппарат ловит сообщение через свою радиостанцию. Даже если не применять наследование и полиморфизм, то здесь все равно придется делать третий класс, который занимается диспетчеризацией сообщений. Не хранить же ссылки на все адресаты внутри каждого объекта? Это опять же приведет к проблемам, если появляется новый объект, с которым нужно наладить связь.
1
|
||
|
Заблокирован
|
|
| 11.04.2014, 11:50 [ТС] | |
|
DrOffset, ладно, убедил, в некоторых случаях полиморфизм может дать профит
![]() спасибо за потраченное время, поставлю ка я тебе во всех постах по плюсу ...
1
|
|
|
Сгибальщик
42 / 42 / 4
Регистрация: 18.05.2013
Сообщений: 220
|
|
| 11.04.2014, 12:13 | |
|
Если надо изменить переменную базового класса разом для всех дочерних, то чем плохи static-члены?
0
|
|
| 11.04.2014, 12:13 | |
|
Для чего переопределяют методы, если можно просто в дочернем классе создать метод с таким же именем? Объявить в классе-наследнике указатель, указывающий туда же, куда указывает указатель в классе-родителе Как присвоить данные родителю в дочернем классе? Запуск конструктора родителя в дочернем конструкторе Имеется базовый класс с некоторым событием, как вызвать это событие в дочернем классе? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Магическое мышление и магия, современная наука не отличима от магии
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|