|
|
|
Наследование
|
|||
|---|---|---|---|
|
#18+
Есть несколько классов : A, B, C. B наследован от A, C соответственно от B. Заведомо неизвестно какой класс от какого наследуется. Как узнать какой класс является предком? Лучше тебя потом простят, чем сейчас не заметят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 21:57 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 10:15 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
Akh Код: plaintext 1. 2. 3. 4. Мне в рантайме надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:10 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
ponuch Akh Код: plaintext 1. 2. 3. 4. Мне в рантайме надо... Сделай поле типа класса. А лучше будет, чтобы вся разница между объектами была инкопсулирована в них. Например, это добиваются виртуальными фунциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:19 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
ponuchМне в рантайме надо... Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:20 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
А расскажите как в рантайме класс отнаследовать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:28 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
maXmoожуетьА ты на адрес посмотри! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:48 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
maXmoкакой адрес? Адрес ponuch Откуда: MadHouse ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:57 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
Я ожуел от поста Barlone ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 14:01 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
Если в рантайме класс отнаследовать нельзя, то какя нужда в рантайме определять какой класс от какого наследуется ? А автор вопроса зачем-то этого хочет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:15 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
ну раз он не знает, кто от кого наследуется на стадии компиляции, ему придётся делать это в рантайме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:17 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
Вот мне и интересно, как может быть что "он не знает, кто от кого наследуется на стадии компиляции" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:20 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
maXmoну раз он не знает, кто от кого наследуется на стадии компиляции, ему придётся делать это в рантайме. Я знаю, кто от кого наследуется, просто требуется определять это еще в рантайме. Если кого-то шокируют мои вопросы, то прошу прощения, на с++ пишу около 2-х месяцев так что пока некоторых вещей не знаю... Вот! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:22 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
ну может лень ему узнать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:22 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
ponuchЯ знаю, кто от кого наследуется, просто требуется определять это еще в рантайме.начальством, что ли, требуется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:25 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
maXmo ponuchЯ знаю, кто от кого наследуется, просто требуется определять это еще в рантайме.начальством, что ли, требуется? Типо того... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:26 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
Не могу представить себе ситуации, в которой такое может требоваться. Слдержательный пример можно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:27 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
BarloneНе могу представить себе ситуации, в которой такое может требоваться. Слдержательный пример можно ? На здоровье. На форме есть PageControl, на нем много табшитов, на которых в свою очередь размещены фреймы, которые в свою очередь динамически создаются в рантайме, из-за большого количества компонентов на них. Есть класс который по определенным правилам ищет и прорисовывает эти компоненты. Так вот, чтобы не писать длинную проверку какой именно фрейм на ActivePage находится, была и сделана проверка на принадлежность компонента классу. Типа, если TFrame, то.... а что дальше неважно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:23 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
2ponuch Так чем тебя dynamic_cast не устраивает? Рекурсивно шаришь по всему списку Components и, если приводится к какому-нибудь типу, что-то меняем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:36 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
pandrew 2ponuch Так чем тебя dynamic_cast не устраивает? Рекурсивно шаришь по всему списку Components и, если приводится к какому-нибудь типу, что-то меняем. Разве я сказал что не устраивает? Я воспользовался советом, большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:54 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
Так вы что хотите проверять, какому классу принадлежит объект или какой класс от какого наследуется ? 1). Знаем что В наследуется от А. Получаем в некоторой функции указатель на А и хотим проверить а не является ли он указателем на В. Ситуация вполне понятная, проверяется с помощью dynamic_cast 2). Есть классы А,В, и мы не знаем, наследуется ли А от В , В от А, или они друг от друга не наследуются и хотим это выяснить. Изначальный вопрос "Заведомо неизвестно какой класс от какого наследуется. Как узнать какой класс является предком?" вроде бы именно про такую ситуацию. И я не могу понять, как такое может быть и зачем это нужно. Так у вас который вариант ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:08 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
BarloneТак вы что хотите проверять, какому классу принадлежит объект или какой класс от какого наследуется ? 1). Знаем что В наследуется от А. Получаем в некоторой функции указатель на А и хотим проверить а не является ли он указателем на В. Ситуация вполне понятная, проверяется с помощью dynamic_cast 2). Есть классы А,В, и мы не знаем, наследуется ли А от В , В от А, или они друг от друга не наследуются и хотим это выяснить. Изначальный вопрос "Заведомо неизвестно какой класс от какого наследуется. Как узнать какой класс является предком?" вроде бы именно про такую ситуацию. И я не могу понять, как такое может быть и зачем это нужно. Так у вас который вариант ? Вариант 2 более общий, хотелось реализовать именно его, но все свелось к 1-му варианту. Так что скорее 1-й. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:11 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
для правильной работы dynamic_cast в рассматриваемой иерархии классов должна быть минимум одна виртуальная функция ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 19:21 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
Gryzдля правильной работы dynamic_cast в рассматриваемой иерархии классов должна быть минимум одна виртуальная функция Ты что пишешь иерархию и не делаешь виртуального деструктора? ну и накой она такая нужна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 20:52 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
BarloneА расскажите как в рантайме класс отнаследовать ? Никак, такого в С++ не бывает. Ищи для этого другие языки. LISP, Smalltalk... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 00:18 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
BarloneЕсли в рантайме класс отнаследовать нельзя, то какя нужда в рантайме определять какой класс от какого наследуется ? А автор вопроса зачем-то этого хочет. Это очень даже понятно какая нужда. Посмотри например в COM, там все на этом построено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 00:20 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
ponuch Я знаю, кто от кого наследуется, просто требуется определять это еще в рантайме. typeid(), dynamic_cast. RTTI должно быть включено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 00:23 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто очень даже понятно какая нужда. Посмотри например в COM, там все на этом построено.это как? Иерархия интерфейсов делается средствами с++ или аналогичными (бинарно совместимыми), поэтому она известна на стадии компиляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 11:48 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
maXmoэто как? Иерархия интерфейсов делается средствами с++ или аналогичными (бинарно совместимыми), поэтому она известна на стадии компиляции. Заблуждаешься. Иерархия COM определется интерфейсами, которые он реализует, и может быть выяснена непосредственно у него же через QueryInterface. Кроме того и без COM у достаточно сложного приложения (много Objects) проще бывает привести тип объекта и как-то изменить его поведение. Т.к. часть исходников м.б. недоступна, или крайне нежелательно что-то трогать (потребуется заново проводить тестирование). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 14:28 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
pandrew Иерархия COM определется интерфейсами, которые он реализует, и может быть выяснена непосредственно у него же через QueryInterface. Это как ? QueryInterface не дает возможности выяснить, какой интерфейс от какого наследуется. pandrewКроме того и без COM у достаточно сложного приложения (много Objects) проще бывает привести тип объекта и как-то изменить его поведение. С приведением типа объекта понятно, да, это может быть необходимым. Непонятна необходимость динамического выяснения иерархии. pandrewТ.к. часть исходников м.б. недоступна, или крайне нежелательно что-то трогать (потребуется заново проводить тестирование).Часть исходников недоступна ? Если у вас нет соответствующих .h файлов, вы не сможете использовать классы - не сможете скомпилировать программу. Если .h есть, то иерархия классов там описана и вы ее можете узнать в design-time. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 14:57 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
pandrewИерархия COM определется интерфейсами, которые он реализует, и может быть выяснена непосредственно у него же через QueryInterface.такого понятия как "иерархия ком" нет и там как раз всё идёт в терминах не "наследует", а "реализует", вот когда ты уже получил интерфейс, то средствами языка у тебя описано, какие интерфейсы он наследует в свою очередь - и это известно на стадии компиляции. pandrewТ.к. часть исходников м.б. недоступна, или крайне нежелательно что-то трогать (потребуется заново проводить тестирование).заголовочные файлы с описанием интерфейсов доступны всегда, и на стадии компиляции известна вся иерархия этих интерфейсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 15:04 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
BarloneЧасть исходников недоступна ? Если у вас нет соответствующих .h файлов, вы не сможете использовать классы - не сможете скомпилировать программу. Если .h есть, то иерархия классов там описана и вы ее можете узнать в design-time. Во-первых компиляция и сборка вещи разные. Для линковки мне нужны только obj, lib, dll. Ну, а если нет у меня ничего такого (h-файлов), т.е. есть только exe. И что жизнь кончилась, программист безработный, ничего сделать нельзя? Классы в смысле C++ действительно не существует (компилятор все испортил), но иерархия софта все равно у меня перед глазами. Остаются SendMessage, PostMesage... maXmoзаголовочные файлы с описанием интерфейсов доступны всегда, и на стадии компиляции известна вся иерархия этих интерфейсов. Интересно, а как же работают ActiveX в интернете? Да и кому кроме С-программиста интересны h-файлы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 15:39 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
pandrewКлассы в смысле C++ действительно не существует (компилятор все испортил)Если классов нет, то наследование кого от кого ты хочешь выяснить? pandrewИнтересно, а как же работают ActiveX в интернете?через IDispatch. При чём тут это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 16:41 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
maXmo MasterZivЭто очень даже понятно какая нужда. Посмотри например в COM, там все на этом построено.это как? Иерархия интерфейсов делается средствами с++ или аналогичными (бинарно совместимыми), поэтому она известна на стадии компиляции. Ты когда оперируешь другим, чужим объектом, никогда заранее не знаешь, какие он интерфейсы он поддерживает. И он может динамически поддерживать или нет интерфейсы, т.е. один объект одного типа (CLSID) может сгенерировать два инстанса (интерфейса), один из которых будет поддерживать какой-то интерфейс, отличный от IUnknown, а другой - не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 18:06 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
COM-объект может поддерживать несколько интерфейсов, но при чем здесь наследование ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2006, 07:46 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
я так понял, автора интересуют только с++ классы, отнаследованные от других с++ классов средствами с++ - в таком случае какой класс от какого отнаследован известно на стадии компиляции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2006, 11:17 |
|
||
|
Наследование
|
|||
|---|---|---|---|
|
#18+
BarloneCOM-объект может поддерживать несколько интерфейсов, но при чем здесь наследование ? Вопрос конечно хороший. Можно считать реализацию интерфейса множественным наследованием. Можно считать агрегацией. Поскольку при реализации интерфейса реализатор является подтипом интерфейса я предпочитаю считат это наследованием. Хотя можно конечно думать и по-другому. Но в контексте топика полезнее думать как я. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2006, 19:52 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2029997]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 388ms |

| 0 / 0 |
