79 lines
3.7 KiB
HTML
79 lines
3.7 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>begin</b><br>
|
||
<strong> var </strong>si := <b>new</b> Stack<integer>; <br>
|
||
<strong> var </strong>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>
|
||
Print(sr.Pop);<br>
|
||
<b>end</b>.</code></p>
|
||
</blockquote>
|
||
<p>Подстановка конкретного типа-параметра в обобщенный тип называется
|
||
<strong>инстанцированием</strong>.</p>
|
||
<p> </p>
|
||
</body>
|
||
|
||
</html>
|