82 lines
3.1 KiB
HTML
82 lines
3.1 KiB
HTML
<html>
|
|
|
|
<head>
|
|
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
|
</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>Îáîáùåííûì òèïîì (generic) íàçûâàåòñÿ
|
|
øàáëîí äëÿ ñîçäàíèÿ êëàññà, çàïèñè èëè èíòåðôåéñà, ïàðàìåòðèçîâàííûé îäíèì èëè íåñêîëüêèìè
|
|
òèïàìè. Êëàññ (çàïèñü, èíòåðôåéñ) îáðàçóåòñÿ èç øàáëîíà êëàññà (çàïèñè,
|
|
èíòåðôåéñà) ïîäñòàíîâêîé
|
|
êîíêðåòíûõ òèïîâ â êà÷åñòâå ïàðàìåòðîâ. Ïàðàìåòðû óêàçûâàþòñÿ ïîñëå èìåíè
|
|
îáîáùåííîãî òèïà â óãëîâûõ ñêîáêàõ. Íàïðèìåð, <code>Stack<T></code> -
|
|
øàáëîí êëàññà ñïèñêà ýëåìåíòîâ òèïà <code>T</code>,
|
|
ïàðàìåòðèçîâàííûé òèïîì <code>T</code>, à <code>
|
|
Stack<integer></code> - êëàññ ñïèñêà ñ ýëåìåíòàìè òèïà
|
|
<code>integer</code>.</p>
|
|
<p><a href="generic_sub.html">Îáîáù¸ííûå ïîäïðîãðàììû îïèñûâàþòñÿ çäåñü</a>.</p>
|
|
<p>Äëÿ îáúÿâëåíèÿ øàáëîíà êëàññà èñïîëüçóåòñÿ ñëåäóþùèé
|
|
ñèíòàêñèñ:</p>
|
|
<blockquote>
|
|
<p><code><b>type</b><br>
|
|
Node<T> = <b>class<br>
|
|
</b>data: T;<br>
|
|
next: Node<T>;<br>
|
|
<b>public</b><br>
|
|
<b>constructor</b> Create(d: T; nxt: Node<T>);<br>
|
|
<b>begin</b><br>
|
|
data := d;<br>
|
|
next := nxt;<br>
|
|
<b>end</b>;<br>
|
|
<b>end</b>; <br>
|
|
Stack<T> = <b>class<br>
|
|
</b>tp: Node<T>; <br>
|
|
<b>public<br>
|
|
procedure</b> Push(x: T);<br>
|
|
<b>begin</b><br>
|
|
tp := <b>new</b> Node<T>(x,tp);<br>
|
|
<b>end</b>;<br>
|
|
<b>function</b> Pop: T;<br>
|
|
<b>begin</b><br>
|
|
Result := tp.data;<br>
|
|
tp := tp.next;<br>
|
|
<b>end</b>;<br>
|
|
<b>function</b> Top: T;<br>
|
|
<b>begin</b><br>
|
|
Result := tp.data;<br>
|
|
<b>end</b>;<br>
|
|
<b>function</b> IsEmpty: boolean;<br>
|
|
<b>begin</b><br>
|
|
Result := tp = nil;<br>
|
|
<b>end</b>;<br>
|
|
<b>end</b>;</code></p>
|
|
</blockquote>
|
|
<p>Èñïîëüçîâàíèå øàáëîíà êëàññà èëëþñòðèðóåòñÿ íèæå:</p>
|
|
<blockquote>
|
|
<p><code><b>var</b> <br>
|
|
si: Stack<integer>;<br>
|
|
sr: Stack<real>;<br>
|
|
<b>begin</b><br>
|
|
si := <b>new</b> Stack<integer>; <br>
|
|
sr := <b>new</b> Stack<real>;<br>
|
|
<b>for</b> <span lang="en-us"><b>var</b> </span>i := 1 <b>to</b> 10 <b>do</b><br>
|
|
si.Push(Random(100));<br>
|
|
<b>while</b> <b>not</b> si.IsEmpty <b>do</b><br>
|
|
sr.Push(si.Pop);<br>
|
|
<b>while</b> <b>not</b> sr.IsEmpty <b>do</b><br>
|
|
write(sr.Pop,' ');<br>
|
|
<b>end</b>.</code></p>
|
|
</blockquote>
|
|
<p>Ïîäñòàíîâêà êîíêðåòíîãî òèïà-ïàðàìåòðà â îáîáùåííûé òèï íàçûâàåòñÿ
|
|
èíñòàíöèðîâàíèåì.</p>
|
|
<p> </p>
|
|
</body>
|
|
|
|
</html>
|