gpt4 book ai didi

pascal - 如何在pascal中定义运算符

转载 作者:行者123 更新时间:2023-12-01 13:32:15 25 4
gpt4 key购买 nike

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

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; 这样的计算您需要重载 Modulus 运算符。

关于pascal - 如何在pascal中定义运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45297158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com