Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Абстрактные методы в TP


Автор: Hacknslash 28.6.2009, 21:20
Люди добрые, напишите плз пару строчек как объявлять сабж в TP 7.1, а то у меня чего-то не выходит)

Автор: ne_tru_e 29.6.2009, 00:39
Первый раз слышу! Может виртуальные?

Автор: newinfo2005 29.6.2009, 00:40
virtual дописываешь к методу и все)) если умеешь работать с объектами, н оерализацию сделаешь в потомке от родителя, где он был объявлен виртуальным

Автор: Hacknslash 29.6.2009, 13:16
Цитата

Первый раз слышу! Может виртуальные?

Абстрактный метод - метод без реализации, который служит только для наследования и его соответственно нельзя вызвать. Абстрактный метод само собой должен быть виртуальным, но обратное неверно)

Цитата

virtual дописываешь к методу и все)) если умеешь работать с объектами, н оерализацию сделаешь в потомке от родителя, где он был объявлен виртуальным

Опять же виртуальный метод != абстрактный.
Virtual написать необходимо, так как абстрактный метод должен быть виртуальным, но необходимо дописать что-то еще. Иначе компилятор предсказуемо ругнется на то, что у метода нет реализации.

Да, без абстрактных методов конечно можно обойтись, но это у меня чисто исследовательский интерес, а не практический)

Автор: newinfo2005 29.6.2009, 14:30
abstract; - дописать пробовал? гуглить?

Автор: ne_tru_e 29.6.2009, 14:32
http://pascal.kansoftware.ru/?id=gl16_2~1
http://www.rsdn.ru/article/Delphi/delphiabs.xml#EMD
http://www.inr.ac.ru/~info21/cpascal/cp_report_1.4_rus.htm#10.2

Автор: Hacknslash 29.6.2009, 15:11
Если тупо дописать abstract; после virtual; , то компилятор нецензурно ругнется) Впрочем также он ругнется, если я вместо abstract написать qwerty например)
Гуглить пробовал в первую очередь)

По первой ссылке: я там был) Там просто говорится, что абстрактные методы есть в турбовижне и что есть некая процедура Abstract. 
При попытке воткнуть куда-нибудь процедуру Abstract куда-нибудь компилятор ругается по-разному. Вообще у меня такое ощущение, что надо бы что-нибудь подключить какой-нибудь модуль, чтобы эту процедуру использовать... Вопрос в том, какой...

По второй ссылке object Pascal != Turbo Pascal. При попытке просто дописать abstract, как по ссылке, компилятор ругается.

По третьей ссылке тоже ничего полезного)


Автор: newinfo2005 29.6.2009, 16:04
сам же сказал, Борланд паскаль попробуй

Автор: volvo877 1.7.2009, 19:26
Цитата(Hacknslash @  29.6.2009,  15:11 Найти цитируемый пост)
При попытке воткнуть куда-нибудь процедуру Abstract куда-нибудь компилятор ругается по-разному. Вообще у меня такое ощущение, что надо бы что-нибудь подключить какой-нибудь модуль, чтобы эту процедуру использовать... Вопрос в том, какой...
Правильное ощущение... В Хелпе, кстати, написано, какой.

Код

uses objects; { <--- Вот этот }
type
  TA = object
    procedure p; virtual;
    constructor init;
  end;


constructor TA.init;
begin end;

procedure TA.p;
begin
  Abstract;
end;

...

, ничего не ругается. До тех пор, пока ты не захочешь вызвать абстрактный метод.

Автор: Hacknslash 2.7.2009, 20:07
Ага, спасибо большое) Три раза перечитывал статью в хелпе и только сейчас заметил, где там пишется какой модуль подключать  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)