This repository has been archived on 2024-12-25. You can view files and clone it, but cannot push or open issues or pull requests.
OldPascalProjects/LanguageFeatures/FracOperatorOverload.pas
2024-03-10 20:32:51 +03:00

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.