如何在 Pascal 中定义运算符

How to define operator in pascal

在我的程序中,我需要在代码中经常获取百分比。现在我有这个功能来解决它​​

function percent(whole, part: double):double;
 begin
      percent:= whole * part / 100;
 end;

我想知道有没有什么方法可以创建新的运算符,这样我就可以只写类似:a:=100%20 的内容,并获得想要的结果。它也应该能够用作:c:=b/a;或者:c:=c/a;

没有办法做到这一点。您只能使用函数

您可以在 Pascal 中定义运算符,但仅限于记录类型。它被称为运算符重载,您可以阅读here。您所做的是定义您自己的记录类型数据,然后重载标准运算符,例如 = < > % 等来执行您希望它们执行的操作。这是一个简单的例子:

Interface

Type
  TMyFloatType = record
    value: Extended;

    class operator Implicit(n: Extended): TMyFloatType;
    class operator Explicit(n: Extended): TMyFloatType;
    class operator Equal(a, b: TMyFloatType): Boolean;
    class operator GreaterThan(a, b: TMyFloatType): Boolean;
  end;


Implementation


class operator TMyFloatType.Implicit(n: Extended): TMyFloatType;
begin
 result.value := n;
end;

class operator TMyFloatType.Explicit(n: Extended): TMyFloatType;
begin
 result.value := n;
end;

class operator TMyFloatType.Equal(a, b: TMyFloatType): Boolean;
begin
  result := (a.value = b.value);
end;

class operator TMyFloatType.GreaterThan(a, b: TMyFloatType): Boolean;
begin
  result := (a.value > b.value);
end;

然后您可以像使用常规变量一样使用它:

procedure Test;
var
  a, b: TMyFloatType;
Begin
  // first assign some values to a and b
  a := 3.14;
  b := 2.7;      

  if a > b then
  Begin
    // Do something
  End;
End;

您可以重载的运算符也包括数学运算符,例如 + - / * mod div 等。

现在,话虽如此,我确实相信为了避免简单的功能而实际实现它并不是很方便,但是嘿,你的选择。

这里的要点是您可以让操作员过载来执行您的命令。我相信要进行像 percentage := a % 20; 这样的计算,您需要重载模数运算符。

我只会使用一个函数。顺便说一下,你的函数

函数百分比(整体,部分:双):双; 开始 百分比:=整体*部分/100; 结束;

不正确。应该是

百分比 := 100.0 * 部分/全部;