Я работал над блоком AVL-дерева, где пользователь может указать, что он хочет иметь внутри дерева. Я использую объекты для этой цели. В моем модуле я определил родительский объект под названием Node, а указатель на этот объект - PTNode. В этом объекте у меня есть 3 атрибута: Balance: integer: Left, Right: PTNode для сыновей узла и 1 метод: Function Is_Greater (Node1: PTNode): целое число, которое является виртуальным и абстрактным. И пользователю остается определить эту функцию (я не знаю, будет ли это char или integer и т. Д.).Абстрактная функция в Pascal
Я пытался проверить это устройство, и я столкнулся с одной проблемой. Я создал дочерний объект моего объекта Node, называемый Object1 = Object (Node), и добавил один атрибут X: integer, и я хочу определить функцию Is_Greater. Вот декларация и часть кода:
Unit
Unit Tree;
interface
type PTNode=^Node;
Node=object
Left,Right:PTNode;
Balance:integer;
Function Is_Greater(Node1:PTNode):integer; virtual; abstract;
end;
после этого списка I и осуществлять функции в моей части, которые не являются, что отношение к моей проблеме.
Это моя тестовая программа:
Program Test;
uses Tree;
Type PTObject=^Object1;
Object1=object(Node)
X:integer;
Function Is_Greater(Node1:PTNode):integer; virtual;
end;
Function Object1.Is_Greater(Node1:PTNode):integer;
begin
if X>Node1^.X then Is_Greater:=1
else if X<Node1^.X then Is_Greater:=-1
else Is_Greater:=0;
end;
, и это дает мне ошибку о том, что X не является частью узла объекта. Но когда я пытаюсь установить Node1: PTObject, тогда он дает мне ошибку, что моя функция не соответствует ее родительской. Я не знаю, как это решить.
Приятно видеть такую старую школу. На самом деле это не шутка. Однако, если вам нужна завершенная реализация дерева AVL, то это уже сделано в FCL: [Дерево AVL] (http://wiki.lazarus.freepascal.org/AVL_Tree). – Abelisto
Мне это известно, но это школьный проект – ratrt13