Показать сообщение отдельно
Старый 26.05.2004, 12:12   #18  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Изначально опубликовано Lexey
Приведение по-аксаптовскию Выглядит дико, но работает
PHP код:
class C()
{
void insert()
{
    
A   ded;
    ;
    
ded this;
    if (
ded)
        
ded.insert();
}       

Такие вызовы - явная ошибка дизайна. Надо делать как belugin написал.
Дык, в том то и дело, что не работает . Совсем недавно столкнулся...
В Вашем примере вызовется метод класса С (то есть рекурсия) и произойдет переполнение стека. ded = this приводит к тому, что дед становится внуком. Это в дебаггере хорошо видно (хоть и странновато). У переменной ded после такого присвоения Type будет указывать по-прежнему на А, но Value покажет new, C.
Или я Вас неправильно понял? Так как же все-таки работает приведение (пусть даже дикое)?

Остальные предложенные варианты вполне очевидны... Но, интересно, кто-нибудь думал о варианте, когда классы А и В - системные? По-моему, нерешаемо... Кто как думает?
__________________