powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Наследование
40 сообщений из 40, показаны все 2 страниц
Наследование
    #34128634
Фотография ponuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть несколько классов : A, B, C. B наследован от A, C соответственно от B. Заведомо неизвестно какой класс от какого наследуется. Как узнать какой класс является предком?

Лучше тебя потом простят, чем сейчас не заметят.
...
Рейтинг: 0 / 0
Наследование
    #34129217
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
A *a;
B *b;
a=b;//так компилятор пропустит
b=a;//будет ошибка
...
Рейтинг: 0 / 0
Наследование
    #34129695
Фотография ponuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh
Код: plaintext
1.
2.
3.
4.
A *a;
B *b;
a=b;//так компилятор пропустит
b=a;//будет ошибка


Мне в рантайме надо...
...
Рейтинг: 0 / 0
Наследование
    #34129724
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dynamic_cast
...
Рейтинг: 0 / 0
Наследование
    #34129729
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ponuch Akh
Код: plaintext
1.
2.
3.
4.
A *a;
B *b;
a=b;//так компилятор пропустит
b=a;//будет ошибка


Мне в рантайме надо...

Сделай поле типа класса.

А лучше будет, чтобы вся разница между объектами была инкопсулирована в них. Например, это добиваются виртуальными фунциями.
...
Рейтинг: 0 / 0
Наследование
    #34129735
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ponuchМне в рантайме надо...
Код: plaintext
1.
2.
3.
if(!dynamic_cast<B*>(a))
{  // ошибка!! a не наследуется от типа B
}
...
Рейтинг: 0 / 0
Наследование
    #34130022
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А расскажите как в рантайме класс отнаследовать ?
...
Рейтинг: 0 / 0
Наследование
    #34130070
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ожуеть
...
Рейтинг: 0 / 0
Наследование
    #34130115
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoожуетьА ты на адрес посмотри!
...
Рейтинг: 0 / 0
Наследование
    #34130159
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой адрес?
...
Рейтинг: 0 / 0
Наследование
    #34130170
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoкакой адрес?
Адрес ponuch
Откуда: MadHouse
...
Рейтинг: 0 / 0
Наследование
    #34130201
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ожуел от поста Barlone
...
Рейтинг: 0 / 0
Наследование
    #34130581
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в рантайме класс отнаследовать нельзя, то какя нужда в рантайме определять какой класс от какого наследуется ? А автор вопроса зачем-то этого хочет.
...
Рейтинг: 0 / 0
Наследование
    #34130600
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну раз он не знает, кто от кого наследуется на стадии компиляции, ему придётся делать это в рантайме.
...
Рейтинг: 0 / 0
Наследование
    #34130613
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот мне и интересно, как может быть что "он не знает, кто от кого наследуется на стадии компиляции" ?
...
Рейтинг: 0 / 0
Наследование
    #34130623
Фотография ponuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoну раз он не знает, кто от кого наследуется на стадии компиляции, ему придётся делать это в рантайме.

Я знаю, кто от кого наследуется, просто требуется определять это еще в рантайме. Если кого-то шокируют мои вопросы, то прошу прощения, на с++ пишу около 2-х месяцев так что пока некоторых вещей не знаю... Вот!
...
Рейтинг: 0 / 0
Наследование
    #34130625
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну может лень ему узнать
...
Рейтинг: 0 / 0
Наследование
    #34130638
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ponuchЯ знаю, кто от кого наследуется, просто требуется определять это еще в рантайме.начальством, что ли, требуется?
...
Рейтинг: 0 / 0
Наследование
    #34130640
Фотография ponuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo ponuchЯ знаю, кто от кого наследуется, просто требуется определять это еще в рантайме.начальством, что ли, требуется?

Типо того...
...
Рейтинг: 0 / 0
Наследование
    #34130643
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу представить себе ситуации, в которой такое может требоваться. Слдержательный пример можно ?
...
Рейтинг: 0 / 0
Наследование
    #34130865
Фотография ponuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneНе могу представить себе ситуации, в которой такое может требоваться. Слдержательный пример можно ?

На здоровье. На форме есть PageControl, на нем много табшитов, на которых в свою очередь размещены фреймы, которые в свою очередь динамически создаются в рантайме, из-за большого количества компонентов на них. Есть класс который по определенным правилам ищет и прорисовывает эти компоненты. Так вот, чтобы не писать длинную проверку какой именно фрейм на ActivePage находится, была и сделана проверка на принадлежность компонента классу. Типа, если TFrame, то.... а что дальше неважно
...
Рейтинг: 0 / 0
Наследование
    #34130910
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2ponuch Так чем тебя dynamic_cast не устраивает?
Рекурсивно шаришь по всему списку Components и, если приводится к какому-нибудь типу, что-то меняем.
...
Рейтинг: 0 / 0
Наследование
    #34130996
Фотография ponuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandrew 2ponuch Так чем тебя dynamic_cast не устраивает?
Рекурсивно шаришь по всему списку Components и, если приводится к какому-нибудь типу, что-то меняем.

Разве я сказал что не устраивает? Я воспользовался советом, большое спасибо!
...
Рейтинг: 0 / 0
Наследование
    #34131060
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вы что хотите проверять, какому классу принадлежит объект или какой класс от какого наследуется ?
1). Знаем что В наследуется от А. Получаем в некоторой функции указатель на А и хотим проверить а не является ли он указателем на В. Ситуация вполне понятная, проверяется с помощью dynamic_cast

2). Есть классы А,В, и мы не знаем, наследуется ли А от В , В от А, или они друг от друга не наследуются и хотим это выяснить. Изначальный вопрос "Заведомо неизвестно какой класс от какого наследуется. Как узнать какой класс является предком?" вроде бы именно про такую ситуацию. И я не могу понять, как такое может быть и зачем это нужно.

Так у вас который вариант ?
...
Рейтинг: 0 / 0
Наследование
    #34131070
Фотография ponuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneТак вы что хотите проверять, какому классу принадлежит объект или какой класс от какого наследуется ?
1). Знаем что В наследуется от А. Получаем в некоторой функции указатель на А и хотим проверить а не является ли он указателем на В. Ситуация вполне понятная, проверяется с помощью dynamic_cast

2). Есть классы А,В, и мы не знаем, наследуется ли А от В , В от А, или они друг от друга не наследуются и хотим это выяснить. Изначальный вопрос "Заведомо неизвестно какой класс от какого наследуется. Как узнать какой класс является предком?" вроде бы именно про такую ситуацию. И я не могу понять, как такое может быть и зачем это нужно.

Так у вас который вариант ?

Вариант 2 более общий, хотелось реализовать именно его, но все свелось к 1-му варианту. Так что скорее 1-й.
...
Рейтинг: 0 / 0
Наследование
    #34131478
Gryz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для правильной работы dynamic_cast в рассматриваемой иерархии классов должна быть минимум одна виртуальная функция
...
Рейтинг: 0 / 0
Наследование
    #34131636
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gryzдля правильной работы dynamic_cast в рассматриваемой иерархии классов должна быть минимум одна виртуальная функция
Ты что пишешь иерархию и не делаешь виртуального деструктора? ну и накой она такая нужна?
...
Рейтинг: 0 / 0
Наследование
    #34131828
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneА расскажите как в рантайме класс отнаследовать ?

Никак, такого в С++ не бывает. Ищи для этого другие языки. LISP, Smalltalk...
...
Рейтинг: 0 / 0
Наследование
    #34131831
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneЕсли в рантайме класс отнаследовать нельзя, то какя нужда в рантайме определять какой класс от какого наследуется ? А автор вопроса зачем-то этого хочет.

Это очень даже понятно какая нужда. Посмотри например в COM, там все на этом построено.
...
Рейтинг: 0 / 0
Наследование
    #34131834
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ponuch
Я знаю, кто от кого наследуется, просто требуется определять это еще в рантайме.


typeid(), dynamic_cast. RTTI должно быть включено.
...
Рейтинг: 0 / 0
Наследование
    #34132603
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто очень даже понятно какая нужда. Посмотри например в COM, там все на этом построено.это как? Иерархия интерфейсов делается средствами с++ или аналогичными (бинарно совместимыми), поэтому она известна на стадии компиляции.
...
Рейтинг: 0 / 0
Наследование
    #34133435
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoэто как? Иерархия интерфейсов делается средствами с++ или аналогичными (бинарно совместимыми), поэтому она известна на стадии компиляции.
Заблуждаешься. Иерархия COM определется интерфейсами, которые он реализует, и может быть выяснена непосредственно у него же через QueryInterface.
Кроме того и без COM у достаточно сложного приложения (много Objects) проще бывает привести тип объекта и как-то изменить его поведение. Т.к. часть исходников м.б. недоступна, или крайне нежелательно что-то трогать (потребуется заново проводить тестирование).
...
Рейтинг: 0 / 0
Наследование
    #34133599
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandrew Иерархия COM определется интерфейсами, которые он реализует, и может быть выяснена непосредственно у него же через QueryInterface. Это как ? QueryInterface не дает возможности выяснить, какой интерфейс от какого наследуется.
pandrewКроме того и без COM у достаточно сложного приложения (много Objects) проще бывает привести тип объекта и как-то изменить его поведение. С приведением типа объекта понятно, да, это может быть необходимым. Непонятна необходимость динамического выяснения иерархии.
pandrewТ.к. часть исходников м.б. недоступна, или крайне нежелательно что-то трогать (потребуется заново проводить тестирование).Часть исходников недоступна ? Если у вас нет соответствующих .h файлов, вы не сможете использовать классы - не сможете скомпилировать программу. Если .h есть, то иерархия классов там описана и вы ее можете узнать в design-time.
...
Рейтинг: 0 / 0
Наследование
    #34133652
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandrewИерархия COM определется интерфейсами, которые он реализует, и может быть выяснена непосредственно у него же через QueryInterface.такого понятия как "иерархия ком" нет и там как раз всё идёт в терминах не "наследует", а "реализует", вот когда ты уже получил интерфейс, то средствами языка у тебя описано, какие интерфейсы он наследует в свою очередь - и это известно на стадии компиляции.

pandrewТ.к. часть исходников м.б. недоступна, или крайне нежелательно что-то трогать (потребуется заново проводить тестирование).заголовочные файлы с описанием интерфейсов доступны всегда, и на стадии компиляции известна вся иерархия этих интерфейсов.
...
Рейтинг: 0 / 0
Наследование
    #34133787
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BarloneЧасть исходников недоступна ? Если у вас нет соответствующих .h файлов, вы не сможете использовать классы - не сможете скомпилировать программу. Если .h есть, то иерархия классов там описана и вы ее можете узнать в design-time.
Во-первых компиляция и сборка вещи разные. Для линковки мне нужны только obj, lib, dll.
Ну, а если нет у меня ничего такого (h-файлов), т.е. есть только exe. И что жизнь кончилась, программист безработный, ничего сделать нельзя? Классы в смысле C++ действительно не существует (компилятор все испортил), но иерархия софта все равно у меня перед глазами. Остаются SendMessage, PostMesage...

maXmoзаголовочные файлы с описанием интерфейсов доступны всегда, и на стадии компиляции известна вся иерархия этих интерфейсов.
Интересно, а как же работают ActiveX в интернете? Да и кому кроме С-программиста интересны h-файлы?
...
Рейтинг: 0 / 0
Наследование
    #34134086
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandrewКлассы в смысле C++ действительно не существует (компилятор все испортил)Если классов нет, то наследование кого от кого ты хочешь выяснить?

pandrewИнтересно, а как же работают ActiveX в интернете?через IDispatch. При чём тут это?
...
Рейтинг: 0 / 0
Наследование
    #34134499
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo MasterZivЭто очень даже понятно какая нужда. Посмотри например в COM, там все на этом построено.это как? Иерархия интерфейсов делается средствами с++ или аналогичными (бинарно совместимыми), поэтому она известна на стадии компиляции.

Ты когда оперируешь другим, чужим объектом, никогда заранее не знаешь, какие он интерфейсы он поддерживает. И он может динамически поддерживать или нет интерфейсы, т.е. один объект одного типа (CLSID) может сгенерировать два инстанса (интерфейса), один из которых будет поддерживать какой-то интерфейс, отличный от IUnknown, а другой - не будет.
...
Рейтинг: 0 / 0
Наследование
    #34135201
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
COM-объект может поддерживать несколько интерфейсов, но при чем здесь наследование ?
...
Рейтинг: 0 / 0
Наследование
    #34135757
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так понял, автора интересуют только с++ классы, отнаследованные от других с++ классов средствами с++ - в таком случае какой класс от какого отнаследован известно на стадии компиляции
...
Рейтинг: 0 / 0
Наследование
    #34142021
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneCOM-объект может поддерживать несколько интерфейсов, но при чем здесь наследование ?

Вопрос конечно хороший. Можно считать реализацию интерфейса множественным наследованием. Можно считать агрегацией.

Поскольку при реализации интерфейса реализатор является подтипом интерфейса я предпочитаю считат это наследованием. Хотя можно конечно думать и по-другому. Но в контексте топика полезнее думать как я.
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Наследование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]