Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
bb:redbook:211 [2019/07/24 14:57] caufman [5. Атрибут EXTENSIBLE] |
bb:redbook:211 [2020/10/29 07:08] (текущий) |
||
|---|---|---|---|
| Строка 142: | Строка 142: | ||
| Пример использования супер-вызова приведён ниже: | Пример использования супер-вызова приведён ниже: | ||
| - | + | MODULE Test_super_method; | |
| + | |||
| + | IMPORT Log; | ||
| + | |||
| + | TYPE | ||
| + | tVector = POINTER TO EXTENSIBLE RECORD | ||
| + | x*: REAL; | ||
| + | END; | ||
| + | |||
| + | tMyVector = POINTER TO RECORD (tVector) | ||
| + | y*: REAL; | ||
| + | END; | ||
| + | |||
| + | |||
| + | VAR | ||
| + | v: tVector; | ||
| + | v1: tMyVector; | ||
| + | |||
| + | PROCEDURE (v: tVector)Log*(), | ||
| + | BEGIN | ||
| + | Log.Real(v.x); | ||
| + | END Log; | ||
| + | |||
| + | PROCEDURE (v: tMyVector)Log*(); | ||
| + | BEGIN | ||
| + | Log.String(" | ||
| + | Log.Real(v.y); | ||
| + | Log.String(" | ||
| + | END Log; | ||
| + | |||
| + | PROCEDURE Start*; | ||
| + | BEGIN | ||
| + | v.Log; | ||
| + | v1.Log | ||
| + | END Start; | ||
| + | |||
| + | BEGIN | ||
| + | NEW (v); | ||
| + | NEW (v1); | ||
| + | END Test_super_method. | ||
| + | |||
| + | (!)Test_super_method.Start | ||
| + | |||
| + | компилируется " | ||
| + | старый модуль Test_super_method выгружен | ||
| + | 0.0 | ||
| + | Привет, | ||
| + | 0.0 0.0 | ||
| + | ------------- | ||
| В примере хорошо видно, что супер-вызов оформлен в виде инструкции v.Log^. Вместо того, чтобы заново переписывать всю логику в методе, | В примере хорошо видно, что супер-вызов оформлен в виде инструкции v.Log^. Вместо того, чтобы заново переписывать всю логику в методе, | ||