virtual;
end;
TObj1 = object(TObj)
procedure Init; override;
end;
procedure TObj1.Init;
begin
inherited;
end;
procedure TObj.Init;
begin
end;
Что не компилится? Бага?
[dcc32 Error] Project1.dpr(16): E2037 Declaration of 'Init' differs from previous declaration
а точно object нужен, а не class?
Я точно хочу object
может, область видимости указать
#FPC Всех спасёт! 😁 project1.lpr(8,29) Error: OVERRIDE cannot be used in objects
У меня делфи. Но тогда зачем можно указывать virtual?
Кажется нужно constructor добавить в объект и тогда всё будет
constructor Create?
Угу не работает.
reintroduce; ?
Он то как спасет?
Нет, не работает. Похоже и правда нельзя использовать override
Для объектов оверриде ненадо. Виртуал там поставь
type TObj1 = object constructor Create; procedure Init; virtual; end; TObj2 = object(TObj1) procedure Init; virtual; end; constructor TObj1.Create; begin end; procedure TObj1.Init; begin end; procedure TObj2.Init; begin inherited; end;
Подскажи как конструтор вызвать? Не компилится. type TObj = object public constructor Create; procedure Init; virtual; end; TObj1 = object(TObj) public constructor Create; procedure Init; virtual; //override; end; { TObj } constructor TObj.Create; begin Writeln('TObj.Create'); end; procedure TObj.Init; begin Writeln('TObj.Init'); end; { TObj1 } constructor TObj1.Create; begin Writeln('TObj1.Create'); end; procedure TObj1.Init; begin Writeln('TObj1.Init'); inherited; end; procedure Run; var Obj : TObj; begin Obj := TObj.Create; Obj.Init; Obj := TObj1.Create; Obj.Init; end;
Саш, тебе надо документацию почитать для начала, что ли. Без обид, но не зная синтаксиса, пытаться что-то делать, непродуктивно
вообще лучше начинать с классов, чем с объектов. с ними проще. с разрушением, думаю, справишься
Так у меня опыта 20 лет. Забыл про object, давно не пользовался :)
да? ну тогда ок :)
Хочу на object сделать интерфейсы.
есть смысл родителю иерархии пристегнуть виртуальный деструктор, чтобы можно было любого наследника корректно убивать по Dispose(p, Done);
А чо не на рекорде? Там они вполне легко реализуются, нафига оверхэд?
у рекордов нет наследования и виртуальных методов
Мне наследование нужно.
Смотря как сделать... я ваще не про текущие возможности рекордов, а про те которые были ваще со времен пятой дельфи
вот пример смотреть реализацию TObjectDestroyer на рекорде, там своя VMT есть https://alexander-bagel.blogspot.com/2014/11/store.html
Да, я знаю про такой вариант и его использую. У меня просто наследования в интерфейсках и получается для каждого интверфейса придется городить свой record со всей структурой.
Рекордам генертками можно прилепить подобие наследования))
и будет это в 10 раз хуже эмуляции классов в Си
Будет обычный рекорд
Обсуждают сегодня