Войти
ПрограммированиеФорумОбщее

Полиморфизм с++ Что не так с этим кодом? (3 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#30
18:17, 3 фев. 2012

Kartonagnick
о что должен делать
newFoo.test();
если у "настоящего" типа нет такого метода?


#31
18:28, 3 фев. 2012

LuckyMan, не о том речь, что он должен, или не должен. А о том речь, как вообще получить знание об истинном типе

#32
18:30, 3 фев. 2012

Kartonagnick
> А о том речь, как вообще получить знание об истинном типе
typeid, не?

#33
18:31, 3 фев. 2012
Трололо крепчает.
#34
18:35, 3 фев. 2012

LuckyMan, а что тебе даст typeid?

А ты сам как думаешь?

Чем таким принципиальным пляски с typeid отличаются от динамик_каст?

#35
18:38, 3 фев. 2012

Kartonagnick
  Чувак, ты сам не знаешь, чего хочешь. Тебе предложили каст как единственное нормальное и доступное решение в С++. Ты предложил какую-то хрень и на вопрос что делать, если метода в классе нет отвечаешь "не о том речь". Это натуральная клоунада.

#36
18:43, 3 фев. 2012

Zefick
> единственное нормальное и доступное решение в С++
Оно не единственное, более универсальное - да, но не единственное, я это уже показал выше :)

/me вкусно ест

#37
18:51, 3 фев. 2012

Zefick, нет чувак. И я прекрасно знаю чего я хочу. Если не существует нормальных решений - значит можно поискать среди не нормальных.
А вот ты похоже не догоняешь смысл задачи. У тебя мозга спрессована "правильным мировоззрением". Кароче - иди нафег, со своими трололо и прочей бурдой. Толку от тебя все равно никакого.

#38
18:56, 3 фев. 2012

KpeHDeJIb
> я это уже показал выше :)
  Найди отличия: #15 и #25. Йохохо )

#39
18:59, 3 фев. 2012

Zefick
> Найди отличия
Нашел, что дальше делать?

#40
19:00, 3 фев. 2012

Kartonagnick
> а что тебе даст typeid?
информацию о типе)
ты же сам сказал "А о том речь, как вообще получить знание об истинном типе".
если задача другая - скажи какая, я не понял.

#41
19:20, 3 фев. 2012

LuckyMan, представь себе, что у тебя есть на руках Base* ptr;
Ты не знаешь его настоящего типа. Но знаешь, что у него есть метод test();
Тебе нужно вытащить на свет божий истинный тип объекта, и от имени этого типа толкнуть метод test();

Но поскольку, сам ты не знаешь истинного типа объекта, то задать проверку на динамик_каст ты не можешь (не знаешь к чему приводить).
По-этой же причине, при помощи typeid тоже сравнивать не получится.

#42
19:27, 3 фев. 2012

Kartonagnick
> Ты не знаешь его настоящего типа. Но знаешь, что у него есть метод test();
В С++ рефлекшен не завезли.
Kartonagnick
> Тебе нужно вытащить на свет божий истинный тип объекта, и от имени этого типа
> толкнуть метод test();
- а зечем? Если мы не знаем, какой там тип объекта, как код-то писать?

#43
19:29, 3 фев. 2012

C++ язык со статической типизацией. Все типы должны быть известны во время компиляции. Компилятор не может подставить тип, который будет известен только во время выполнения.
  Самый лучший вариант написания такого кода тебе уже предложили - использование промежуточного класса или интерфейса, у которого определён этот метод. Но если ты несмотря ни на что собираешься упрямо плодить г-код, читай следующий абзац.

Надо либо приводить dynamic_cast'ом, перебирая все возможные типы, либо написать такой механизм самостоятельно, который будет делать это автоматически. Если я ничего не путаю, это называется двойной диспетчеризацией. Сам я никогда этим не занимался, поэтому могу ошибаться. Почитай книгу Александреску "Современное проектирование на C++", может там что-то найдёшь.

#44
19:31, 3 фев. 2012

Grey304
> - а зечем? Если мы не знаем, какой там тип объекта, как код-то писать?

Ради спортивного интереса)

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.