Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия | Следующая версия Следующая версия справа и слева | ||
bb:redbook:211 [2018/11/30 01:13] 127.0.0.1 внешнее изменение |
bb:redbook:211 [2019/07/24 14:53] caufman [3. Атрибут ABSTRACT] |
||
---|---|---|---|
Строка 14: | Строка 14: | ||
Пример ниже демонстрирует некоторые возможности абстрактных методов: | Пример ниже демонстрирует некоторые возможности абстрактных методов: | ||
- | + | MODULE Test_abs_method; | |
- | + | ||
- | + | | |
+ | |||
+ | TYPE | ||
+ | tVector = POINTER TO ABSTRACT RECORD | ||
+ | x*: REAL; | ||
+ | END; | ||
+ | |||
+ | tMyVector = POINTER TO RECORD (tVector) | ||
+ | z*: REAL; | ||
+ | END; | ||
+ | |||
+ | tMyVector1 = POINTER TO RECORD (tVector) | ||
+ | z*: REAL; | ||
+ | END; | ||
+ | |||
+ | VAR | ||
+ | v: tMyVector; | ||
+ | v1: tMyVector1; | ||
+ | |||
+ | PROCEDURE (v: tVector)Log*, | ||
+ | |||
+ | PROCEDURE (v: tMyVector)Log*(); | ||
+ | BEGIN | ||
+ | Log.Real(v.z); | ||
+ | END Log; | ||
+ | |||
+ | PROCEDURE (v: tMyVector1)Log*(); | ||
+ | BEGIN | ||
+ | Log.String(" | ||
+ | Log.Real(v.z); | ||
+ | Log.String(" | ||
+ | END Log; | ||
+ | |||
+ | PROCEDURE Start*; | ||
+ | BEGIN | ||
+ | v.Log; | ||
+ | v1.Log | ||
+ | END Start; | ||
+ | |||
+ | BEGIN | ||
+ | NEW (v); | ||
+ | NEW (v1); | ||
+ | END Test_abs_method. | ||
+ | |||
+ | (!)Test_abs_method.Start | ||
+ | |||
+ | компилируется " | ||
+ | старый модуль Test_abs_method выгружен | ||
+ | 0.0 0.0 | ||
+ | Привет, | ||
+ | 0.0 0.0 | ||
+ | ------------- | ||
Как видно из примера, | Как видно из примера, | ||