2015-12-28 14:25:15 +03:00
|
|
|
|
// Иллюстрация шаблонов классов в стиле C++ (template)
|
2015-05-14 22:35:07 +03:00
|
|
|
|
type
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Пара объектов
|
2015-05-14 22:35:07 +03:00
|
|
|
|
Pair<T, Q> = 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;
|
|
|
|
|
|
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Пара объектов, каждый из которых можно складывать с объектом того же типа
|
2015-05-14 22:35:07 +03:00
|
|
|
|
PairForPlus<T, Q> = template class(Pair<T,Q>)
|
|
|
|
|
|
public
|
|
|
|
|
|
class function operator+(Left,Right: PairForPlus<T,Q>): PairForPlus<T,Q>;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
class function PairForPlus<T, Q>.operator+(Left,Right: PairForPlus<T,Q>): PairForPlus<T,Q>;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := new PairForPlus<T,Q>(Left.First + Right.First, Left.Second + Right.Second);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
var
|
|
|
|
|
|
r: Pair<real,real> := new Pair<real,real>(3.14,2.8);
|
|
|
|
|
|
a,b: PairForPlus<integer,string>;
|
|
|
|
|
|
|
|
|
|
|
|
begin
|
2015-12-28 14:25:15 +03:00
|
|
|
|
a := new PairForPlus<integer,string>(1, 'один+');
|
|
|
|
|
|
b := new PairForPlus<integer,string>(2, 'два');
|
2015-05-14 22:35:07 +03:00
|
|
|
|
Writeln(r);
|
|
|
|
|
|
Writeln(a + b);
|
|
|
|
|
|
end.
|