Delphi 的运算符重载(1)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Delphi 的运算符重载(1)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                為什么80%的碼農(nóng)都做不了架構師?>>> ??
其實 Delphi 2006 就已經(jīng)支持運算符重載了, 不過 for Win32 的版本只是在 record 里支持.
運算符重載有什么用處呢? 舉個例子:
譬如 "張三"、"李四" 兩人一起來拜見你, 你可能會問: "你們兩個誰大?"
其實你是在問: "你們兩個誰的年齡大?"; 但生活中人們一般都不這么羅嗦.
在程序中能否這樣簡化呢? 這只能通過 "運算符重載" 做到!
先按 "你們兩個誰的年齡大?" 寫出原始例子吧:
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}typeTMyRec = recordname: string;age: Word;end;procedure TForm1.Button1Click(Sender: TObject); varr1,r2: TMyRec;str: string; beginr1.name := '張三'; r1.age := 18;r2.name := '李四'; r2.age := 81;if r1.age > r2.age thenstr := r1.nameelsestr := r2.name;ShowMessageFmt('%s年齡大', [str]); {李四年齡大} end;end.
上面是用 r1.age > r2.age 對比年齡, 如果能用 r1 > r2 來對比的話, 那就相當于: "你們兩個誰大?" 了.
這樣我們需要重載運算符 ">" ; 所謂重載運算符就是賦予某個運算符新的含義、新的功能.
我們可以重載的運算符只能是 Delphi 已有的運算符(還不是全部); C++ 也是這樣.
需要用對應的指示字來表示這個運算符, 譬如: ">" 要用 GreaterThan 表示; C++ 不是這樣.
重載運算符是通過方法實現(xiàn)的, 不過方法的指示字是 class operator (而非 function 或 proceture).
譬如上面的 record 可以這樣聲明:
typeTMyRec = recordname: string;age: Word;class operator GreaterThan(a,b: TMyRec): Boolean;end;
還得有方法的實現(xiàn)(遺憾的是有些不能用 Ctrl+Shift+C 自動建立, 那就復制吧):
class operator TMyRec.GreaterThan(a,b: TMyRec): Boolean; {注意復制后再加上方法名: "TMyRec."} beginResult := a.age > b.age; end;
下面是完整的代碼:
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}typeTMyRec = recordname: string;age: Word;class operator GreaterThan(a,b: TMyRec): Boolean;end;class operator TMyRec.GreaterThan(a,b: TMyRec): Boolean; beginResult := a.age > b.age; end;procedure TForm1.Button1Click(Sender: TObject); varr1,r2: TMyRec;str: string; beginr1.name := '張三'; r1.age := 18;r2.name := '李四'; r2.age := 81;if r1 > r2 thenstr := r1.nameelsestr := r2.name;ShowMessageFmt('%s年齡大', [str]); {李四年齡大} end;end.
這個測試里面有一些漏洞, 譬如: 年齡相等怎么辦? 不必較真, 只是借此說明一個道理而已.
轉(zhuǎn)載于:https://my.oschina.net/hermer/blog/321009
總結
以上是生活随笔為你收集整理的Delphi 的运算符重载(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 学习官方示例 - System.Frac
- 下一篇: linux下单独安装oracle12.1
