fez писал(а) 30. Мая 2006 :: 14:20: Цитата:То что ты предлагаешь - это решение для чисто абстрактных классов, т.е. классов, которые никогда сами по себе не могут быть созданы.
Если же этот класс может быть создан, и он полагается на замену своего базового класса для себя, а потом ты создаешь наследника и код начинает работать по-другому, это полная лажа и источник очень хреновых проблем.
Приведи пример.
ОК. На примере твоей иерархии, только Документы_СБухИтогами я тоже унаследую от Документ.РКО (для примера, это просто абстракция)
класс Документ_РКО = __Документ_РКО@MD : Документ.РКО, Документы_СБухИтогами
{};
класс Документы_СБухИтогами = __Документы_СБИ@MD : Документ.РКО
{};
ДокСБИ = СоздатьОбъект("Документ_СБухИтогами");
ДокСБИ.Инит(__Конкретный_РКО);
Документ_СБухИтогами::Инит(__Конкретный_РКО)
{
ЗаменитьБазовыйОбъект("Документ.РКО", __Конкретный_РКО);
}
Т.е. Документ_СБухИтогами полагает, что он работает с конкретным объектом РКО.
ДокРКО = СоздатьОбъект("Документ_РКО");
ДокРКО.Инит(__Конкретный_РКО_2); // наследованный метод
Я утверждаю, что Инит() должен по-прежнему заменять базовый объект класса "Документы_СБухИтогами".
Ты предлагаешь заменять базовый объект класса "Документ_РКО".
Здесь 2 проблемы:1. Код класса Документы_СБухИтогами начинает работать по-другому, это то, о чем я писал в самом начале. Это источник ошибок.
2. В принципе, Документы_СБухИтогами
ничего не обязан знать о каких-то там наследниках. Это принципиально.