| Полиморфизм в 1С++Ключевые слова: 1С++, ООП, полиморфизм, виртуальный метод.
 
 
 Для изменения поведения базового класса удобно реализовать полиморфные методы, вызываемые из базового класса. Пример такого использования: формирование бухгалтерской операции документа. Формируемые проводки зависят от вида документа, а их инициализация и запись общая для всех.
 
   Чтобы формирование проводок было вызвано полиморфно, необходимо обратиться к нему через контекст.
 
 //класс Проводки
Функция Этот(Конт)
 Возврат Конт;
 КонецФункции
 Процедура СоздатьПроводки(Конт) Экспорт
 Инициализация();
 Этот(Контекст).Формирование(Конт);
 Запись();
 КонецПроцедуры
 //класс ПроводкиПереоценки
 Процедура Формирование(Конт) Экспорт
 …
 КонецПроцедуры
 //использование
 ПроводкиПереоценки = СоздатьОбъект(«ПроводкиПереоценки»);
 ПроводкиПереоценки.СоздатьПроводки(Контекст);
 Переопределенный метод обязательно должен быть объявлен как «Экспорт». В базовом классе, если нет необходимости, его вообще можно не определять (абстрактный метод). Однако, это приведет естественно к ошибке в случае использования из экземпляра непосредственно базового класса или из дочернего класса, в котором метод не переопределен (он вообще не определен :-)). Во избежание ошибки, его нужно определить обязательно с директивой «Экспорт».
 Для вызова из дочернего класса метода, определенного в базовом, также необходимо использовать контекст.
 
 //дочерний класс
Функция БазовыйОбъект(Конт)
 //получаем контекст экземпляра базового класса
 Возврат Конт.ПолучитьБазовыйКласс("ИмяБазовогоКласса");
 КонецФункции
 Процедура МояПроцедура() Экспорт
 БазовыйОбъект(Контекст).БазоваяПроцедура();
 КонецПроцедуры
 Базовая процедура должна быть определена с директивой «Экспорт».
 
 |