Цитата:
Изначально опубликовано Lexey
Приведение по-аксаптовскию Выглядит дико, но работает
PHP код:
class C()
{
void insert()
{
A ded;
;
ded = this;
if (ded)
ded.insert();
}
}
Такие вызовы - явная ошибка дизайна. Надо делать как belugin написал.
Дык, в том то и дело, что не работает
. Совсем недавно столкнулся...
В Вашем примере вызовется метод класса С (то есть рекурсия) и произойдет переполнение стека. ded = this приводит к тому, что дед становится внуком. Это в дебаггере хорошо видно (хоть и странновато). У переменной ded после такого присвоения Type будет указывать по-прежнему на
А, но Value покажет
new, C.
Или я Вас неправильно понял? Так как же все-таки работает приведение (пусть даже дикое)?
Остальные предложенные варианты вполне очевидны... Но, интересно, кто-нибудь думал о варианте, когда классы А и В - системные?
По-моему, нерешаемо... Кто как думает?