Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Наследование / 25 сообщений из 40, страница 1 из 2
14.11.2006, 21:57
    #34128634
ponuch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследование
Есть несколько классов : A, B, C. B наследован от A, C соответственно от B. Заведомо неизвестно какой класс от какого наследуется. Как узнать какой класс является предком?

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


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


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

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

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

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

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

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

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

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

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

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

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

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


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