Наследование
TType2 = object (TType1)
TType1
private
procedure AbstractMethod;
public
{При инициализации TType2 WhatType = 0}
WhatType: Byte;
function CallAM;
end;
....
procedure TType1.AbstractMethod;
begin
Abstract
end;
function TType1.CallAM;
begin
AbstractMethod
end;
TType2
private
procedure AbstractMethod; virtual;
end;
....
procedure AbstractMethod;
begin
{Operators}
end;
Эти типы я получаю так
begin
New(Get);
// Collection: TCollection
Get := Collection.At(Index)
end;
....
begin
if PType2(Get^(0))^.WhatType = 0 then
PType2(Get^(0))^.CallAM
end.
И вылазиет ошибка 211 Abstract error
Но я же перекрыл этот метод!
Если я при инциализации TType2 поставлю в WhatType = 1, то в Get(0)^.WhatType = 0!
P.S.: Что то подобное у меня уже было, я решил не юзать указатели, но тут без них нельзя, сегмента не хватит
Есть два типа
Честно говоря, по синтаксису я так и не понял, Паскаль это или Дельфи. В BP, насколько я знаю, не было разделов public, private и т. п. Значит, Дельфи. Но использование объектов в стиле C++ смущает, однако... Пишем собственный KOL?
Короче, для Паскаля:
TAncestor = object
procedure DoSomething; virtual;
end;
TDescendant = object(TAncestor)
procedure DoSomething; virtual;
end;
procedure TAncestor.DoSomething;
begin
Abstract;
end;
procedure TDescendant.DoSomething;
begin
{ doing... }
end;
Для Дельфи:
TAncestor = object
procedure DoSomething; virtual; abstract;
end;
TDescendant = object(TAncestor)
procedure DoSomething; override;
end;
procedure TDescendant.DoSomething;
begin
// doing...
end;
В BP, насколько я знаю, не было разделов public, private и т. п.
Там нет protected и published, а все остальное есть. А вообще это Pascal
Но использование объектов в стиле C++ смущает, однако...
Совсем расхвалил ))
Я обнаружил(для себя) %/ сильное различие между ООП в Pascal и Delphi
Поэтому, что бы самому еще раз не запутаться, напиши pls код объекта для Pascal'я с одним наследником и т.д как я писал в начале
Там нет protected и published, а все остальное есть.
Хз, странно как-то. Надо будет проверить. Это только в семерке появилось. Я больше под Turbo Vision писал, а он еще с шестой версии шел, поэтому никаких public и private там не было.
Скорее поругал. Зачем использовать объекты в стиле Си++, когда в Дельфи есть классы? В Паскале - без вопросов.
В приведенном мной коде различия в ООП нет, только в синтаксисе. А вот упомянутые выше классы и объекты - уже различия ООП.
Предполагалось, что по примерам ты и сам сможешь проанализировать. Достаточно добавить virtual после объявления AbstractMethod в базовом типе.
Скорее поругал. Зачем использовать объекты в стиле Си++, когда в Дельфи есть классы?
Кстати объекты в стиле Си++ это как понять?
В Паскале - без вопросов
BP 7
Предполагалось, что по примерам ты и сам сможешь проанализировать. Достаточно добавить virtual после объявления AbstractMethod в базовом типе.
Понял thx
Кстати объекты в стиле Си++ это как понять?
Ну, можно назвать их и классами. В Си++ они называются классами, но в Дельфи будет путаница.
Разница вот в чем:
- в Си++ класс - запись с методами
- в Дельфи класс - некая абстрактная сущность, имеющая общего предка (TObject) и поддержку со стороны языка и среды выполнения
В Дельфи ключевое слово object описывает записи с методами, а class - классы.
В Дельфи ключевое слово object описывает записи с методами, а class - классы.
Ясно! Я нашел почему я путался: в Delphi есть и object и class, а в Pascal'е только object! Спасибо, сэкономил массу времяни ))
Ну, можно назвать их и классами. В Си++ они называются классами, но в Дельфи будет путаница.
Разница вот в чем:
- в Си++ класс - запись с методами
- в Дельфи класс - некая абстрактная сущность, имеющая общего предка (TObject) и поддержку со стороны языка и среды выполнения
В Дельфи ключевое слово object описывает записи с методами, а class - классы.
Методы в Java. Не путайте терминологию. В C++ - это функции-члены.