|
Заблокирован
|
||||||
Можно ли как-то в дочернем классе получить указатель родителя?09.04.2014, 17:11. Показов 22082. Ответов 40
Метки нет (Все метки)
У меня тут появилась мыслишка
![]() В любом классе есть так сказать скрытый указатель на самого себя - this, а можно ли как то получить в дочернем классе указатель на родительский класс? P.S.: без всякой явной передачи в конструктор дочернего класса указателя на базовый ... Добавлено через 12 минут ладно, опять же забейте, просто было интересно, есть ли возможность в дочернем классе получить указатель на базовый и присвоить какое то значение по этому указателю, например: (конструктор дочернего)
0
|
||||||
| 09.04.2014, 17:11 | |
|
Ответы с готовыми решениями:
40
Получить родительский класс в дочернем классе Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе |
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 10.04.2014, 09:23 | ||
|
1
|
||
|
Заблокирован
|
||
| 10.04.2014, 10:44 [ТС] | ||
0
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 10.04.2014, 11:12 | ||
|
1
|
||
|
Заблокирован
|
|||
| 10.04.2014, 11:35 [ТС] | |||
Я тут подумал, что ведь в дочернем классе присутствует всё барахло их всех родительских , если делать кучу подобных присоединений, получишь крутой оверхэд по памяти ... Бред в общем. Наследование - это вообще по сути такая немного бесполезная штука, которая нужна по сути только в проектах, над которыми работают сотни кодеров, чтоб типа один хрен написал класс с каким то функционалом, а другой прогер унаследовался от этого класса и получил профит в уже существующем готовом функционале предыдущего прогера, типа разделение обязанностей ... Хотя вот в C# есть полезная штука - parial классы... ну да ладно ....
0
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||
| 10.04.2014, 12:44 | |||||
|
Я очень много видел в инете подобных тем, где кто-то пытался обвинить язык в недостаточной полноте и отсуствии фич, однако недостаточно просто сказать "хочу вот это!". Нужно же это обосновать. Рассмотреть в комплексе с остальными возможностями языка. Как правило, заявления таких товарищей не выдерживали критики, просто хотя бы потому, что предложивший не до конца разобрался в языке. Именно поэтому стандарты принимают так долго. Это длительный процесс проверки и обсуждений со всех сторон. К примеру моя иерархия с самолетами. Она отражает конструктивные дополнения к первоначальному проекту. Задача состоит в том, чтобы имея базовую конструкцию, получить на основе ее модификации. При этом пилоты (те, кто используют класс). которые работали с базовой конструкцией не должны испытывать трудностей, работая с теми же узлами в модифицированной (интерфейс наследуется, изменяется только реализация). То есть тут понятно. вот есть парк моделей, построенных на базе одной базовой, и есть некто, кто работает с ними (механики, пилоты и т.д.). Ведь от деталей задачи зависит то, как ее надо решать. Правда ведь?
1
|
|||||
|
Заблокирован
|
|
| 10.04.2014, 15:43 [ТС] | |
|
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 10.04.2014, 17:46 | ||
|
1
|
||
|
Заблокирован
|
|
| 10.04.2014, 17:55 [ТС] | |
|
да ерунда это всё, т.к. это нужно чисто для интерфейсных абстрактных классов, которые просто жёстко устанавливают те функции, которые нужно реализовать, типа чтоб ты не забыл
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 10.04.2014, 18:41 | ||
|
Как бы ты стал решать задачу? Добавлено через 10 минут Еще пример, реальный - реализация MVC в Qt. Модель - полиморфный тип, Представление дергает интерфейсные методы, а внутри они могут хоть таблицу, хоть дерево, хоть из базы, хоть из файла, хоть из сети. Причем всегда можно написать свою модель, которая реализует то, что требуется. Полиморфизм, однако. Твой способ, как это реализовать по-другому?
1
|
||
|
Заблокирован
|
|||
| 10.04.2014, 20:57 [ТС] | |||
|
Добавлено через 59 секунд
0
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||
| 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
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 10.04.2014, 22:08 | ||
|
Или ты хочешь такой пример, который вообще без виртуальных функций и наследования реализован быть не может в принципе? Ну так ты это, вспомни про то, что полиморфизм - это общее понятие. Оно даже к языку не привязано - это понятие из ООП. Поэтому любая такая задача, в которой есть работа с разнородными данными одинаковым образом, - сведется к полиморфизму. Просто на С - это будет больше кода и указатели на функции в таблицах. А на С++ есть готовый инструмент в виде наследования и виртуальных вызовов. Поэтому не понято с чего бы нам, имея инструмент, городить свои if`ы и(или) таблицы вызовов. Ну и я уже привел тебе пример свой, он тебе чем-то не подошел. Но и варианта своего ты не предложил.
1
|
||
|
Заблокирован
|
||
| 10.04.2014, 22:24 [ТС] | ||
|
с утра отпишусь, но пока аргументы в пользу полиморфизма, нежели в пользу какого - то оптимального паттерна для конкретной задачи, выглядят сомнительно ....
Но Qt я всё таки знаюВот можно реально пример какой - нибуть хотя бы на двух трёх классах из пары строк, где было бы видно, что О-О да, тут с полиморфизмом реально круче, удобней и меньше строк кода ....
0
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||||||||||||||
| 11.04.2014, 10:30 | ||||||||||||||
Добавлено через 30 минут newbie666, Ну на вот тебе пример. Основная идея в main(); С полиморфизмом.
Без полиморфизма (на самом деле он там есть, только реализованный вручную).
Модель упрощена, иначе придется реализовывать слишком много. Всего лишь демонстрация. Это нужно учитывать. Классы Pilot и характеристики внутренностей воздушных судов и т.д. не привожу, их реализация не влияет на идею. Способы взлета вертолета и самолета разные. Алгоритм, который назначает машины к взлету не обязан знать про это. Так же как и диспетчеру все равно на какие конкретные кнопки нажимает пилот, главное чтобы он соблюдал нормы полета. Первый пример устойчив к расширению парка машин, второй - нет. Это основное и главное преимущество. Код не компилируемый, предназначен для демонстрации идеи и все.
1
|
||||||||||||||
|
Заблокирован
|
|
| 11.04.2014, 10:52 [ТС] | |
|
DrOffset, не ну ты уж меня за нуба то не держи, несмотря на мой ник
![]() Что такое полиморфизм я прекрасно знаю. Но вот например, как быть с полиморфизмом, ну допустим даже с твоими флаинг машинами, если им нужно обмениваться данными между друг другом?
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 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 | |
|
Помогаю со студенческими работами здесь
40
Для чего переопределяют методы, если можно просто в дочернем классе создать метод с таким же именем? Объявить в классе-наследнике указатель, указывающий туда же, куда указывает указатель в классе-родителе Как присвоить данные родителю в дочернем классе? Запуск конструктора родителя в дочернем конструкторе Имеется базовый класс с некоторым событием, как вызвать это событие в дочернем классе? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|