免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Delphi 的運(yùn)算符重載(1)

其實(shí) Delphi 2006 就已經(jīng)支持運(yùn)算符重載了, 不過 for Win32 的版本只是在 record 里支持.

運(yùn)算符重載有什么用處呢? 舉個(gè)例子:
譬如 "張三"、"李四" 兩人一起來拜見你, 你可能會(huì)問: "你們兩個(gè)誰大?"
其實(shí)你是在問: "你們兩個(gè)誰的年齡大?"; 但生活中人們一般都不這么羅嗦.

在程序中能否這樣簡化呢? 這只能通過 "運(yùn)算符重載" 做到!

先按 "你們兩個(gè)誰的年齡大?" 寫出原始例子吧:
unit Unit1;interfaceuses  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 := 81if r1.age > r2.age then    str := r1.name  else    str := r2.name;  ShowMessageFmt('%s年齡大', [str]); {李四年齡大}end;end.

上面是用 r1.age > r2.age 對(duì)比年齡, 如果能用 r1 > r2 來對(duì)比的話, 那就相當(dāng)于: "你們兩個(gè)誰大?" 了.

這樣我們需要重載運(yùn)算符 ">" ; 所謂重載運(yùn)算符就是賦予某個(gè)運(yùn)算符新的含義、新的功能.
我們可以重載的運(yùn)算符只能是 Delphi 已有的運(yùn)算符(還不是全部); C++ 也是這樣.
需要用對(duì)應(yīng)的指示字來表示這個(gè)運(yùn)算符, 譬如: ">" 要用 GreaterThan 表示; C++ 不是這樣.
重載運(yùn)算符是通過方法實(shí)現(xiàn)的, 不過方法的指示字是 class operator (而非 function 或 proceture).

譬如上面的 record 可以這樣聲明:
type  TMyRec = record    name: string;    age: Word;    class operator GreaterThan(a,b: TMyRec): Boolean;  end;

還得有方法的實(shí)現(xiàn)(遺憾的是有些不能用 Ctrl+Shift+C 自動(dòng)建立, 那就復(fù)制吧):
class operator TMyRec.GreaterThan(a,b: TMyRec): Boolean; {注意復(fù)制后再加上方法名: "TMyRec."}begin  Result := a.age > b.age;end;

下面是完整的代碼:
unit Unit1;interfaceuses  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 := 81if r1 > r2 then    str := r1.name  else    str := r2.name;  ShowMessageFmt('%s年齡大', [str]); {李四年齡大}end;end.

這個(gè)測試?yán)锩嬗幸恍┞┒? 譬如: 年齡相等怎么辦? 不必較真, 只是借此說明一個(gè)道理而已.
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
asp.net 與datasnap交互 Demo
delphi的構(gòu)造函數(shù)和析構(gòu)函數(shù)
C++ operator關(guān)鍵字(重載操作符)
用 Delphi 學(xué)設(shè)計(jì)模式(一) 之簡單工廠篇
delphi 定義全局變量
java基礎(chǔ)之繼承(一)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服