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