|
Заблокирован
|
||||||
Можно ли как-то в дочернем классе получить указатель родителя?09.04.2014, 17:11. Показов 22669. Ответов 40
Метки нет (Все метки)
У меня тут появилась мыслишка
![]() В любом классе есть так сказать скрытый указатель на самого себя - this, а можно ли как то получить в дочернем классе указатель на родительский класс? P.S.: без всякой явной передачи в конструктор дочернего класса указателя на базовый ... Добавлено через 12 минут ладно, опять же забейте, просто было интересно, есть ли возможность в дочернем классе получить указатель на базовый и присвоить какое то значение по этому указателю, например: (конструктор дочернего)
0
|
||||||
| 09.04.2014, 17:11 | |
|
Ответы с готовыми решениями:
40
Получить родительский класс в дочернем классе Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе |
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 10.04.2014, 09:23 | ||
|
1
|
||
|
Заблокирован
|
||
| 10.04.2014, 10:44 [ТС] | ||
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 10.04.2014, 11:12 | ||
|
1
|
||
|
Заблокирован
|
|||
| 10.04.2014, 11:35 [ТС] | |||
Я тут подумал, что ведь в дочернем классе присутствует всё барахло их всех родительских , если делать кучу подобных присоединений, получишь крутой оверхэд по памяти ... Бред в общем. Наследование - это вообще по сути такая немного бесполезная штука, которая нужна по сути только в проектах, над которыми работают сотни кодеров, чтоб типа один хрен написал класс с каким то функционалом, а другой прогер унаследовался от этого класса и получил профит в уже существующем готовом функционале предыдущего прогера, типа разделение обязанностей ... Хотя вот в C# есть полезная штука - parial классы... ну да ладно ....
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||||
| 10.04.2014, 12:44 | |||||
|
Я очень много видел в инете подобных тем, где кто-то пытался обвинить язык в недостаточной полноте и отсуствии фич, однако недостаточно просто сказать "хочу вот это!". Нужно же это обосновать. Рассмотреть в комплексе с остальными возможностями языка. Как правило, заявления таких товарищей не выдерживали критики, просто хотя бы потому, что предложивший не до конца разобрался в языке. Именно поэтому стандарты принимают так долго. Это длительный процесс проверки и обсуждений со всех сторон. К примеру моя иерархия с самолетами. Она отражает конструктивные дополнения к первоначальному проекту. Задача состоит в том, чтобы имея базовую конструкцию, получить на основе ее модификации. При этом пилоты (те, кто используют класс). которые работали с базовой конструкцией не должны испытывать трудностей, работая с теми же узлами в модифицированной (интерфейс наследуется, изменяется только реализация). То есть тут понятно. вот есть парк моделей, построенных на базе одной базовой, и есть некто, кто работает с ними (механики, пилоты и т.д.). Ведь от деталей задачи зависит то, как ее надо решать. Правда ведь?
1
|
|||||
|
Заблокирован
|
|
| 10.04.2014, 15:43 [ТС] | |
|
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 10.04.2014, 17:46 | ||
|
1
|
||
|
Заблокирован
|
|
| 10.04.2014, 17:55 [ТС] | |
|
да ерунда это всё, т.к. это нужно чисто для интерфейсных абстрактных классов, которые просто жёстко устанавливают те функции, которые нужно реализовать, типа чтоб ты не забыл
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 10.04.2014, 18:41 | ||
|
Как бы ты стал решать задачу? Добавлено через 10 минут Еще пример, реальный - реализация MVC в Qt. Модель - полиморфный тип, Представление дергает интерфейсные методы, а внутри они могут хоть таблицу, хоть дерево, хоть из базы, хоть из файла, хоть из сети. Причем всегда можно написать свою модель, которая реализует то, что требуется. Полиморфизм, однако. Твой способ, как это реализовать по-другому?
1
|
||
|
Заблокирован
|
|||
| 10.04.2014, 20:57 [ТС] | |||
|
Добавлено через 59 секунд
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||
| 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
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 10.04.2014, 22:08 | ||
|
Или ты хочешь такой пример, который вообще без виртуальных функций и наследования реализован быть не может в принципе? Ну так ты это, вспомни про то, что полиморфизм - это общее понятие. Оно даже к языку не привязано - это понятие из ООП. Поэтому любая такая задача, в которой есть работа с разнородными данными одинаковым образом, - сведется к полиморфизму. Просто на С - это будет больше кода и указатели на функции в таблицах. А на С++ есть готовый инструмент в виде наследования и виртуальных вызовов. Поэтому не понято с чего бы нам, имея инструмент, городить свои if`ы и(или) таблицы вызовов. Ну и я уже привел тебе пример свой, он тебе чем-то не подошел. Но и варианта своего ты не предложил.
1
|
||
|
Заблокирован
|
||
| 10.04.2014, 22:24 [ТС] | ||
|
с утра отпишусь, но пока аргументы в пользу полиморфизма, нежели в пользу какого - то оптимального паттерна для конкретной задачи, выглядят сомнительно ....
Но Qt я всё таки знаюВот можно реально пример какой - нибуть хотя бы на двух трёх классах из пары строк, где было бы видно, что О-О да, тут с полиморфизмом реально круче, удобней и меньше строк кода ....
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||||||||||||||
| 11.04.2014, 10:30 | ||||||||||||||
Добавлено через 30 минут newbie666, Ну на вот тебе пример. Основная идея в main(); С полиморфизмом.
Без полиморфизма (на самом деле он там есть, только реализованный вручную).
Модель упрощена, иначе придется реализовывать слишком много. Всего лишь демонстрация. Это нужно учитывать. Классы Pilot и характеристики внутренностей воздушных судов и т.д. не привожу, их реализация не влияет на идею. Способы взлета вертолета и самолета разные. Алгоритм, который назначает машины к взлету не обязан знать про это. Так же как и диспетчеру все равно на какие конкретные кнопки нажимает пилот, главное чтобы он соблюдал нормы полета. Первый пример устойчив к расширению парка машин, второй - нет. Это основное и главное преимущество. Код не компилируемый, предназначен для демонстрации идеи и все.
1
|
||||||||||||||
|
Заблокирован
|
|
| 11.04.2014, 10:52 [ТС] | |
|
DrOffset, не ну ты уж меня за нуба то не держи, несмотря на мой ник
![]() Что такое полиморфизм я прекрасно знаю. Но вот например, как быть с полиморфизмом, ну допустим даже с твоими флаинг машинами, если им нужно обмениваться данными между друг другом?
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 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
Для чего переопределяют методы, если можно просто в дочернем классе создать метод с таким же именем? Объявить в классе-наследнике указатель, указывающий туда же, куда указывает указатель в классе-родителе Как присвоить данные родителю в дочернем классе? Запуск конструктора родителя в дочернем конструкторе Имеется базовый класс с некоторым событием, как вызвать это событие в дочернем классе? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|