Инструменты пользователя

Инструменты сайта


bb:redbook:211

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия Следующая версия справа и слева
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; 
-  +   
- +  IMPORT Log; 
 +   
 +  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*, NEW, ABSTRACT; 
 +   
 +  PROCEDURE (v: tMyVector)Log*(); 
 +  BEGIN 
 +      Log.Real(v.z); Log.Real(v.z); Log.Ln 
 +  END Log; 
 +   
 +  PROCEDURE (v: tMyVector1)Log*(); 
 +  BEGIN 
 +      Log.String("Привет, мир!"); Log.Ln; 
 +      Log.Real(v.z); Log.Real(v.z); Log.Ln; 
 +      Log.String("-------------"); Log.Ln; 
 +  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"   236   8 
 +  старый модуль Test_abs_method выгружен 
 +   0.0 0.0 
 +  Привет, мир! 
 +   0.0 0.0 
 +  -------------
 Как видно из примера, абстрактный метод Log для абстрактного типа tpVector реализуется в типе-потомке tpMyVector и tpMyVector1. Вызовы совершенно одинаковые, а результат работы разный. Для переменной v — это просто значение полей. Для переменной v1 — ещё и какие-то дополнительные надписи. [↑] Как видно из примера, абстрактный метод Log для абстрактного типа tpVector реализуется в типе-потомке tpMyVector и tpMyVector1. Вызовы совершенно одинаковые, а результат работы разный. Для переменной v — это просто значение полей. Для переменной v1 — ещё и какие-то дополнительные надписи. [↑]
   
bb/redbook/211.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)