Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Наследование

253
10 мая 2005 года
Proger_XP
1.5K / / 07.08.2004
Есть два типа

Код:
TType1 = object (TObject)
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;


Эти типы я получаю так

Код:
function Get(Index: Word): PType1;
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.: Что то подобное у меня уже было, я решил не юзать указатели, но тут без них нельзя, сегмента не хватит
391
10 мая 2005 года
Archie
562 / / 03.02.2005
А если в TType1 AbstractMethod тоже виртуальным объявить? ;)
10
10 мая 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Proger_XP
Есть два типа


Честно говоря, по синтаксису я так и не понял, Паскаль это или Дельфи. В BP, насколько я знаю, не было разделов public, private и т. п. Значит, Дельфи. Но использование объектов в стиле C++ смущает, однако... Пишем собственный KOL?

Короче, для Паскаля:

Код:
type
  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;

Для Дельфи:
Код:
type
  TAncestor = object
    procedure DoSomething; virtual; abstract;
  end;

  TDescendant = object(TAncestor)
    procedure DoSomething; override;
  end;

procedure TDescendant.DoSomething;
begin
  // doing...
end;
253
14 мая 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by Freeman


В BP, насколько я знаю, не было разделов public, private и т. п.
Там нет protected и published, а все остальное есть. А вообще это Pascal
Но использование объектов в стиле C++ смущает, однако...
Совсем расхвалил ))

Я обнаружил(для себя) %/ сильное различие между ООП в Pascal и Delphi
Поэтому, что бы самому еще раз не запутаться, напиши pls код объекта для Pascal'я с одним наследником и т.д как я писал в начале

10
14 мая 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Proger_XP
Там нет protected и published, а все остальное есть.


Хз, странно как-то. Надо будет проверить. Это только в семерке появилось. Я больше под Turbo Vision писал, а он еще с шестой версии шел, поэтому никаких public и private там не было.

Цитата:
Но использование объектов в стиле C++ смущает, однако...


Скорее поругал. Зачем использовать объекты в стиле Си++, когда в Дельфи есть классы? В Паскале - без вопросов.

Цитата:
Я обнаружил(для себя) %/ сильное различие между ООП в Pascal и Delphi


В приведенном мной коде различия в ООП нет, только в синтаксисе. А вот упомянутые выше классы и объекты - уже различия ООП.

Цитата:
Поэтому, что бы самому еще раз не запутаться, напиши pls код объекта для Pascal'я с одним наследником и т.д как я писал в начале


Предполагалось, что по примерам ты и сам сможешь проанализировать. Достаточно добавить virtual после объявления AbstractMethod в базовом типе.

253
14 мая 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by Freeman


Скорее поругал. Зачем использовать объекты в стиле Си++, когда в Дельфи есть классы?
Кстати объекты в стиле Си++ это как понять?
В Паскале - без вопросов
BP 7
Предполагалось, что по примерам ты и сам сможешь проанализировать. Достаточно добавить virtual после объявления AbstractMethod в базовом типе.
Понял thx

10
14 мая 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Proger_XP
Кстати объекты в стиле Си++ это как понять?


Ну, можно назвать их и классами. В Си++ они называются классами, но в Дельфи будет путаница.

Разница вот в чем:
- в Си++ класс - запись с методами
- в Дельфи класс - некая абстрактная сущность, имеющая общего предка (TObject) и поддержку со стороны языка и среды выполнения

В Дельфи ключевое слово object описывает записи с методами, а class - классы.

253
15 мая 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by Freeman
В Дельфи ключевое слово object описывает записи с методами, а class - классы.


Ясно! Я нашел почему я путался: в Delphi есть и object и class, а в Pascal'е только object! Спасибо, сэкономил массу времяни ))

1.7K
15 мая 2005 года
Envel
206 / / 29.11.2004
Цитата:
Originally posted by Freeman
Ну, можно назвать их и классами. В Си++ они называются классами, но в Дельфи будет путаница.

Разница вот в чем:
- в Си++ класс - запись с методами
- в Дельфи класс - некая абстрактная сущность, имеющая общего предка (TObject) и поддержку со стороны языка и среды выполнения

В Дельфи ключевое слово object описывает записи с методами, а class - классы.


Методы в Java. Не путайте терминологию. В C++ - это функции-члены.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог