// Иллюстрация шаблонов классов в стиле C++ (template) type /// Пара объектов Pair = template class public First: T; Second: Q; constructor (First: T; Second: Q); begin Self.First := First; Self.Second := Second; end; function ToString: string; override; begin Result := Format('({0}; {1})', First, Second); end; end; /// Пара объектов, каждый из которых можно складывать с объектом того же типа PairForPlus = template class(Pair) public class function operator+(Left,Right: PairForPlus): PairForPlus; end; class function PairForPlus.operator+(Left,Right: PairForPlus): PairForPlus; begin Result := new PairForPlus(Left.First + Right.First, Left.Second + Right.Second); end; var r: Pair := new Pair(3.14,2.8); a,b: PairForPlus; begin a := new PairForPlus(1, 'один+'); b := new PairForPlus(2, 'два'); Writeln(r); Writeln(a + b); end.