📄 h20000324-11.htm
字号:
<html><head><script language="JavaScript"> function reset(){ for ( var i=0; i < document.Form1.elements.length; i++ ) { document.Form1.elements[i].options[0].selected=true }}function going(url){ parent.location=url; reset();}</script><style><!--A:link {text-decoration: none; color: #000000; font-family: 宋体}A:visited {text-decoration: none; color: #000000; font-family: 宋体}A:active {text-decoration: none; font-family: 宋体}A:hover {text-decoration: underline:#ffffff; color: #ff0000}body,table {font-size: 9pt; font-family: 宋体}.H1 {font-size: 9pt ; line-height:9pt; align=center}.ourfont {font-size: 9pt ; line-height:9pt; }.ourfont1 {font-size: 9pt ; line-height:9pt; }--></style><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>Delphi 4增訂的Object Pascal</title></head><body topmargin="0" leftmargin="0"><div align="center"><center><table border="0" cellPadding="0" cellSpacing="0" width="700"><tbody> <tr> <td><p class="content4"><span class="font"><img border="0" height="3" src="../../soft/pix.gif" width="700"></span></td> </tr></tbody></table></center></div><div align="center"><center><table border="0" cellPadding="0" cellSpacing="0" width="700"><tbody> <tr> <td bgColor="#3399ff" width="658"><p class="ourfont"><span class="font"> </span><a style="text-decoration: none; color: rgb(255,255,255)" href="../os/H00705-2.htm">操作系统</a><font color="#FFFFFF"><span class="font"><span> |</span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../image/H00705-14.htm">图像处理</a><font color="#FFFFFF"><span>|<span class="font"> </span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../autoCAD/H00705-19.htm">辅助设计</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="../data/H00705-18.htm">数 据 库</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="H00706-1.htm">高级编程</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="../netuse/H00705-20.htm">网络应用</a><font color="#FFFFFF"><span><span class="font"> | </span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../webpage/H00705-21.htm">网页制作</a><font color="#FFFFFF"><span><span class="font"> |</span></span></font> <a style="color: rgb(255,255,255); text-decoration: none" href="../technic/H00706-3.htm">技术交流 </a><a style="color: rgb(255,255,255); text-decoration: none" href="http://202.100.13.77/clslyb/default.asp?clsid=jiaoc"><font color="#FFFFFF"><strong>过客留言</strong></font></a></td> <td bgColor="#3399ff" width="32"><p align="center" class="ourfont"><a href="mailto:net@163.sn.cn"><img src="../../soft/email.gif" alt="email.gif (493 字节)" border="0" WIDTH="20" HEIGHT="19"></a></td> </tr></tbody></table></center></div><div align="center"><center><table border="1" cellSpacing="1" width="700" bordercolor="#3399FF"><tbody> <tr> <td align="left" bgColor="#FFFFFF" vAlign="top" width="700" bordercolor="#0000FF" bordercolorlight="#0000FF" bordercolordark="#0000FF"><p class="ourfont"> </p> <p align="center"><b>Delphi 4增訂的Object Pascal</b></p> <p align="left"><br> <br> 本附錄在於說明Delphi 4新增訂的Object Pascal程式語言。總結來說,Delphi 4的Object Pascal增訂了以下幾大部分:<br> <br> 新增加數種內定資料型態。<br> <br> Dynamic Arrays<br> Method and Routine Overloading<br> Default Parameters.<br> Implementating interfaces by delegation,<br> <br> 可用以下的寫法:<br> property MyInterface: IMyInterface read FMyInterface <br> implements IMyInterface;<br> <br> 新增的內定資料型態<br> 整數方面:<br> <br> 新增加Int64這種長度六十四位元,範圍從-2^63 to 2^63 - 1。<br> 32-bit unsigned integer新增加Longword型態,範圍從0..4294967295。<br> Cardinal的範圍調整成與上述Longword型態相同。<br> <br> 浮點數方面:<br> Real型態基於效率考量,由過去佔用48-bit調整成64-bits,<br> 新增加Real48型態,精確度與過去的Real相同,仍是48-bit。<br> <br> Dynamic Array<br> Delphi 4問世之前,Delphi程式設計師若需要動態長度的陣列,在不得已的情況下,往往採用以下這種「表面上陣列的語法,但實際自己配置管理記憶體」的方式來處理動態陣列:<br> #0001 procedure TForm1.Button1Click(Sender: TObject);<br> #0002 type<br> #0003 TIntegerArray = array[0..0] of integer; <br> #0004 PIntegerArray = ^TIntegerArray;<br> #0005 var<br> #0006 pArrayOfInteger: PIntegerArray; <br> #0007 j: integer;<br> #0008 begin<br> #0009 GetMem(pArrayOfInteger, 10 * SizeOf(Integer)); <br> #0010 for j := 0 to 9 do<br> #0011 pArrayOfInteger^[j] := j; <br> #0012 FreeMem(pArrayOfInteger, 10 * SizeOf(Integer));<br> #0013 end;<br> <br> 如果應用Delphi 4新增加的Dynamic Array,則可改用以下的方式:<br> <br> var MyFlexibleArray: array of Real;<br> <br> 定義之後,以 SetLength 函數改變陣列實際配置的記憶體大小,例如:<br> <br> SetLength(MyFlexibleArray, 20); // 0..19<br> <br> 方便很多,是嗎?若想知道Dynamic Array實際長度,請分別以High與Low函數判斷,傳回「-1」時,表示是一個該陣列的長度為零,例如:<br> <br> #0001 procedure TForm1.Button2Click(Sender: TObject);<br> #0002 var<br> #0003 A: array of Integer;<br> #0004 begin<br> #0005 ShowMessage(IntToStr(High(A))); // -1<br> #0006 SetLength(A, 3);<br> #0007 ShowMessage(IntToStr(High(A))); // 3<br> #0008 A := nil;<br> #0009 ShowMessage(IntToStr(High(A))); // -1<br> #0010 end;<br> <br> 上述的0008這列,指定nil值將會釋放陣列所配置到的記憶。<br> 值得注意的是,Compiler對於Dynamic Array並不會自動進行所謂的「Copy-on-Write」。請看以下的程式例:<br> <br> #0001 procedure TForm1.Button1Click(Sender: TObject);<br> #0002 var<br> #0003 A, B: array of Integer;<br> #0004 begin<br> #0005 SetLength(A, 1);<br> #0006 A[0] := 1;<br> #0007 B := A;<br> #0008 B[0] := 2;<br> #0009 ShowMessage(IntToStr(A[0])); // ==> 2<br> #0010 end;<br> <br> 0008這列改的雖是B[0],但Compiler顯然還沒有聰明到在可能修改陣列內容時,將陣列內容複製一份出來(Copy on (possible) Write),於是,0009這列程式顯示的結果仍是2。<br> 於是,若要進行兩陣列各索引項目一對一的內容複製,只好自行寫迴圈一一複製,或者,採用較為簡便的寫法 ── 呼叫Copy函數:<br> <br> #0001 procedure TForm1.Button4Click(Sender: TObject);<br> #0002 var<br> #0003 A, B: array of Integer;<br> #0004 begin<br> #0005 SetLength(A, 1);<br> #0006 A[0] := 1;<br> #0007 B := Copy(A, 0, 1);<br> #0008 B[0] := 2;<br> #0009 ShowMessage(IntToStr(A[0])); // ==> 1<br> #0010 ShowMessage(IntToStr(B[0])); // ==> 2<br> #0011 end;<br> <br> 最後,請不要將Dynamic Array與第二章提到的Open Array(開放陣列)搞混了。函式參數的開放陣列,語法雖與Dynamic Array差不多,但開放陣列指的是:不限定傳入函式的陣列長度,Dynamic Array則是指:可變長度的陣列,兩者畢竟有所不同。以下是一則我準備的程式範例,不難看出兩者之間的差異:<br> <br> #0001 type<br> #0002 TDynamicInteger = array of integer;<br> #0003 <br> #0004 procedure Clear_OpenArray(var A: array of Integer);<br> #0005 var<br> #0006 I: Integer;<br> #0007 begin<br> #0008 for I := 0 to High(A) do A[I] := 0;<br> #0009 // SetLength(A, 20); // 不可以這麼寫<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -