2018-08-02 22:04:49 +03:00
|
|
|
|
<html>
|
|
|
|
|
|
|
|
|
|
|
|
<head>
|
2019-02-02 19:46:57 +03:00
|
|
|
|
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<param name="Keyword" value="Приведение типов в иерархии Предок-Потомок">
|
2019-02-02 19:46:57 +03:00
|
|
|
|
</object>
|
|
|
|
|
|
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
|
|
|
|
|
<title></title>
|
|
|
|
|
|
<link rel="StyleSheet" href="../../default.css">
|
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
|
|
<body>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<H1>Приведение типов объектов</H1>
|
|
|
|
|
|
<p>Объект производного класса неявно преобразуется к типу
|
|
|
|
|
|
базового класса. Обратное преобразование от типа базового класса
|
|
|
|
|
|
к типу производного класса может быть выполнено только явно с помощью
|
|
|
|
|
|
<a href="../Operations_Expressions/typecast.html">операции приведения типа</a>.</p>
|
|
|
|
|
|
<p>Например:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code><b>type</b><br>
|
|
|
|
|
|
Person =<b> class<br>
|
|
|
|
|
|
...<br>
|
|
|
|
|
|
</b> <b>end</b>;<br>
|
|
|
|
|
|
Student =<b> class</b>(Person)<br>
|
|
|
|
|
|
<b> ...<br>
|
|
|
|
|
|
</b> <b>procedure</b> IncCourse; <br>
|
|
|
|
|
|
<b>end</b>;<br>
|
2025-11-11 22:04:03 +03:00
|
|
|
|
<b><br>begin</b><br>
|
|
|
|
|
|
<strong>var </strong>p: Person := new Student('Иванов',20,3,1); //
|
2025-11-07 16:12:31 +03:00
|
|
|
|
неявное преобразование к типу базового класса<br>
|
2025-11-11 22:04:03 +03:00
|
|
|
|
<strong>var</strong> s: Student := Student(p); // явное
|
2025-11-07 16:12:31 +03:00
|
|
|
|
приведение к типу производного класса <br>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<b>end</b>.</code></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>При выполнении приведения к производному классу может
|
|
|
|
|
|
возникнуть исключение (если приведение невозможно;
|
|
|
|
|
|
например, если в переменной <code>p</code> на момент
|
|
|
|
|
|
выполнения операции будет храниться объект типа <code>Person</code>).
|
2018-08-02 22:04:49 +03:00
|
|
|
|
</p>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>После приведения к типу производного класса можно обращаться
|
|
|
|
|
|
к любым полям, свойствам и методам производного класса:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code>s.IncCourse;</code></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>или без присваивания промежуточной переменной:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code>Student(p)</code><code>.IncCourse;</code></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>Проверка на возможность приведения к типу производного класса
|
|
|
|
|
|
и безопасное приведение к типу производного класса осуществляется с помощью <a href="../Operations_Expressions/isasop.html">операций
|
2018-08-02 22:04:49 +03:00
|
|
|
|
</a><a href="../Operations_Expressions/isasop.html"><b><code>is</code></b>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
и <code><b>as</b></code></a>.</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
</body>
|
|
|
|
|
|
|
|
|
|
|
|
</html>
|