Delphi 연산자 재부팅(1)
2956 단어 Delphi
연산자 재부팅은 무슨 쓸모가 있습니까?예를 들면 다음과 같습니다.
예를 들어'장삼','이사'두 사람이 함께 너를 만나러 오면 너는'너희 둘은 누가 크니?'라고 물어볼 수 있다.
사실 너는 "너희 둘 중 누구의 나이가 많니?"라고 묻고 있다.그러나 생활 속에서 사람들은 일반적으로 이렇게 수다스럽지 않다.
프로그램에서 이렇게 간소화할 수 있습니까?이것은 "연산자 재부팅"을 통해서만 할 수 있습니다.
먼저'둘 중에 누가 나이가 많아요?'원시적인 예를 써라.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TMyRec = record
name: string;
age: Word;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
r1,r2: TMyRec;
str: string;
begin
r1.name := ' '; r1.age := 18;
r2.name := ' '; r2.age := 81;
if r1.age > r2.age then
str := r1.name
else
str := r2.name;
ShowMessageFmt('%s ', [str]); { }
end;
end.
위에는 r1을 사용합니다.age > r2.age는 나이를 비교하는데 r1>r2로 비교할 수 있다면'너희 둘은 누가 크니?'끝.
이렇게 하려면 ">"연산자를 다시 불러와야 합니다.이른바 중재 연산자는 어떤 연산자에게 새로운 의미와 기능을 부여하는 것이다.
우리가 다시 불러올 수 있는 연산자는 델피의 기존 연산자일 뿐입니다. (전부는 아닙니다.)C++도 그렇습니다.
대응하는 지시자로 이 연산자를 표시해야 한다. 예를 들어'>'는
GreaterThan 표현;C++는 그렇지 않습니다.
중재 연산자는 방법을 통해 실현되지만 방법의 지시자는
class operator(function 또는 proceture 아님).
예를 들어 위의 record는 다음과 같이 설명할 수 있습니다.
type
TMyRec = record
name: string;
age: Word;
class operator GreaterThan(a,b: TMyRec): Boolean;
end;
아직 방법이 있습니다. (유감스럽게도 Ctrl+Shift+C로 자동으로 만들 수 없는 것이 있습니다. 복사하십시오.)
class operator TMyRec.GreaterThan(a,b: TMyRec): Boolean; { : "TMyRec."}
begin
Result := a.age > b.age;
end;
다음은 전체 코드입니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TMyRec = record
name: string;
age: Word;
class operator GreaterThan(a,b: TMyRec): Boolean;
end;
class operator TMyRec.GreaterThan(a,b: TMyRec): Boolean;
begin
Result := a.age > b.age;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
r1,r2: TMyRec;
str: string;
begin
r1.name := ' '; r1.age := 18;
r2.name := ' '; r2.age := 81;
if r1 > r2 then
str := r1.name
else
str := r2.name;
ShowMessageFmt('%s ', [str]); { }
end;
end.
이 테스트 안에는 약간의 빈틈이 있다. 예를 들어, 나이가 같으면 어떻게 합니까?진지하게 따질 필요가 없다. 단지 이것을 빌려 이치를 설명할 뿐이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Delphi] TStringBuilder그리고 꼭 사용해야만 할까? 그림처럼 Heap 영역에 "Hello" 공간을 생성하고 포인팅을 한다. "Hello World" 공간을 새로 생성한 후 포인팅을 하게 된다. 결국 "Hello" 라는 String 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.