34 lines
1.0 KiB
ObjectPascal
34 lines
1.0 KiB
ObjectPascal
// Перегрузка операций. Класс "Дробь"
|
|
type
|
|
Frac = record
|
|
private
|
|
n,m: integer;
|
|
public
|
|
constructor (n,m: integer);
|
|
begin
|
|
Self.n := n;
|
|
Self.m := m;
|
|
end;
|
|
class function operator+(f1,f2: Frac): Frac; // операция перегружается как классовая функция
|
|
begin
|
|
Result.n := f1.n*f2.m+f1.m*f2.n;
|
|
Result.m := f1.n*f1.m;
|
|
end;
|
|
class function operator-(f1,f2: Frac): Frac;
|
|
begin
|
|
Result.n := f1.n*f2.m-f1.m*f2.n;
|
|
Result.m := f1.n*f1.m;
|
|
end;
|
|
function ToString: string; override; // Требуется переопределить эту функцию чтобы выводить переменные типа Frac в write
|
|
begin
|
|
Result := Format('{0}/{1}',n,m);
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
var f := new Frac(2,3);
|
|
var f1 := new Frac(1,2);
|
|
writelnFormat('{0} + {1} = {2} ',f,f1,f+f1);
|
|
// f+f1 переводится компилятором в Frac.operator+(f,f1)
|
|
writelnFormat('{0} - {1} = {2} ',f,f1,f-f1);
|
|
end. |