90 lines
3.9 KiB
HTML
90 lines
3.9 KiB
HTML
<html>
|
|
|
|
<head>
|
|
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
|
<param name="Keyword" value="property">
|
|
</object>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
|
<title></title>
|
|
<link rel="StyleSheet" href="../../default.css">
|
|
</head>
|
|
|
|
<body>
|
|
<H1>Èíäåêñíûå ñâîéñòâà</H1>
|
|
<p>Èíäåêñíûå ñâîéñòâà âåäóò ñåáÿ àíàëîãè÷íî ïîëÿì-ìàññèâàì è
|
|
èñïîëüçóþòñÿ, êàê ïðàâèëî, äëÿ äîñòóïà ê ýëåìåíòàì êîíòåéíåðîâ.
|
|
Êàê è ïðè èñïîëüçîâàíèè îáû÷íûõ ñâîéñòâ, ïðè èñïîëüçîâàíèè èíäåêñíûõ ñâîéñòâ
|
|
ìîãóò ïîïóòíî âûïîëíÿòüñÿ íåêîòîðûå äåéñòâèÿ.
|
|
</p>
|
|
<p>Èíäåêñíîå ñâîéñòâî îïèñûâàåòñÿ â êëàññå ñëåäóþùèì
|
|
îáðàçîì:</p>
|
|
<blockquote>
|
|
<p><code><b>property</b> Prop[<code class="codeit">îïèñàíèå èíäåêñîâ</code>]: <code class="codeit">òèï</code> <b>read</b>
|
|
<code class="codeit">èìÿ ôóíêöèè ÷òåíèÿ</code> <b>
|
|
write</b> <code class="codeit">èìÿ ïðîöåäóðû çàïèñè</code>;</code></p>
|
|
</blockquote>
|
|
<p> ïðîñòåéøåì ñëó÷àå îäíîãî èíäåêñà îïèñàíèå èíäåêñíîãî ñâîéñòâà âûãëÿäèò òàê:</p>
|
|
<blockquote>
|
|
<p><code><b>property</b> Prop[ind: <code class="codeit">
|
|
òèï èíäåêñà</code>]: <code class="codeit">òèï</code> <b>read</b>
|
|
<code class="codeit">èìÿ ôóíêöèè ÷òåíèÿ</code> <b>
|
|
write</b> <code class="codeit">èìÿ ïðîöåäóðû çàïèñè</code>;</code></p>
|
|
</blockquote>
|
|
<p> ýòîì ñëó÷àå ôóíêöèÿ ÷òåíèÿ è
|
|
ïðîöåäóðà çàïèñè äîëæíû áûòü ìåòîäàìè ýòîãî êëàññà è èìåòü ñëåäóþùèé âèä:</p>
|
|
<blockquote>
|
|
<p><code><b>function</b> GetProp(ind: <code class="codeit">
|
|
òèï èíäåêñà</code>): <code class="codeit">
|
|
òèï</code>;<b><br>
|
|
procedure</b> SetProp(ind: <code class="codeit">òèï èíäåêñà</code>; v: <code class="codeit">òèï</code>);</code></p>
|
|
</blockquote>
|
|
<p>Âñÿêèé ðàç, êîãäà ìû äëÿ îáúåêòà <code>a</code>, ñîäåðæàùåãî ñâîéñòâî <code>
|
|
Prop</code>, âûïîëíÿåì ïðèñâàèâàíèå <code>a.Prop[ind] := value</code>,
|
|
âûçûâàåòñÿ ïðîöåäóðà <code>SetProp(ind,value)</code>, à
|
|
êîãäà ñ÷èòûâàåì çíà÷åíèå
|
|
<code>a.Prop[ind]</code>, âûçûâàåòñÿ ôóíêöèÿ
|
|
<code>GetProp(ind)</code>.</p>
|
|
<p>Èíäåêñíîå ñâîéñòâî, ïîñëå êîòîðîãî äîáàâëåíî êëþ÷åâîå ñëîâî <b><code>default</code></b> ñ ïîñëåäóþùåé <code>;</code>, íàçûâàåòñÿ <i><b><font color="#FF0000">èí</font></b><font color="#FF0000"><b>äåêñíûì
|
|
ñâîéñòâîì ïî óìîë÷àíèþ</b></font></i> è ïîçâîëÿåò ïîëüçîâàòüñÿ îáúåêòàìè êëàññà êàê ìàññèâàìè, ò.å.
|
|
èñïîëüçîâàòü çàïèñü <code>a[ind]</code> <i>âìåñòî </i> <code>a.Prop[ind]</code>. </p>
|
|
<p>Ïðèíöèïèàëüíîå îòëè÷èå èíäåêñíûõ ñâîéñòâ îò ïîëåé-ìàññèâîâ
|
|
ñîñòîèò â òîì, ÷òî òèï èíäåêñà ìîæåò áûòü ïðîèçâîëüíûì (â ÷àñòíîñòè, ñòðîêîâûì). Ýòî
|
|
ïîçâîëÿåò ëåãêî ðåàëèçîâàòü òàê íàçûâàåìûå àññîöèàòèâíûå ìàññèâû, ýëåìåíòû
|
|
êîòîðûõ èíäåêñèðóþòñÿ ñòðîêàìè. </p>
|
|
<p>Â ñëåäóþùåì ïðèìåðå èíäåêñíîå ñâîéñòâî èñïîëüçóåòñÿ äëÿ çàêðàøèâàíèÿ/ñòèðàíèÿ
|
|
êëåòîê øàõìàòíîé äîñêè â ãðàôè÷åñêîì ðåæèìå.</p>
|
|
<blockquote>
|
|
<p><code><b>uses</b> GraphABC;<br>
|
|
<b>const</b> <br>
|
|
n = 8;<br>
|
|
sz = 50;<br>
|
|
<b>type</b> ChessBoard = <b>class</b><br>
|
|
<b>private</b><br>
|
|
a: <b>array</b> [1..n,1..n] <b>of</b> boolean;<br>
|
|
<b>procedure</b> setCell(x,y: integer; value: boolean);<br>
|
|
<b>begin</b><br>
|
|
<b>if</b> value <b>then</b><br>
|
|
Brush.Color := clWhite<br>
|
|
<b>else</b> Brush.Color := clBlack;<br>
|
|
Fillrect((x-1)*sz+1,(y-1)*sz+1,x*sz,y*sz);<br>
|
|
a[x,y] := value;<br>
|
|
<b>end</b>;<br>
|
|
<b>function</b> getCell(x,y: integer): boolean;<br>
|
|
<b>begin</b><br>
|
|
Result := a[x,y];<br>
|
|
<b>end</b>;<br>
|
|
<b>public</b><br>
|
|
<b>property</b> Cells[x,y: integer]: boolean <b>read</b> getCell <b>write</b>
|
|
setCell; <b>default</b>;<br>
|
|
<b>end</b>;</code></p>
|
|
<p><code><b>var</b> c: ChessBoard := new ChessBoard;</code></p>
|
|
<p><code><b>begin</b><br>
|
|
var x,y: integer;<br>
|
|
<b>for</b> x:=1 <b>to</b> n <b>do</b><br>
|
|
<b>for</b> y:=1 <b>to</b> n <b>do</b><br>
|
|
c[x,y] := Odd(x+y); <br>
|
|
<b>end</b>.</code></p>
|
|
</blockquote>
|
|
</body>
|
|
|
|
</html> |