IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Присвоить метод объекта переменной процедурного типа
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской

Репутация: -  0  +


Здравствуйте!
Возникла такая проблема:
Не могу присвоить процедурной переменной метод объекта (пишет неправильное использование функции)
На сколько помню, то в делфи для этого при объявлении проц. типа надо указать of object. Как это сделать в турбопаскале? Если никак, то где можно прочитать про то, как происходит вызов метода объекта (есть идея вызвать непосредственно по адресу, но как его заставить обработать нужный объект?)...
Заранее спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Большевик–концептуал
**

Группа: Пользователи
Сообщений: 141
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: octagram@jabber.ru
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  1  +


Цитата(Василий1488 @ 12.04.2014 5:40) *
Если никак, то где можно прочитать про то, как происходит вызов метода объекта (есть идея вызвать непосредственно по адресу, но как его заставить обработать нужный объект?)...


Да, у меня тоже никак не получилось получить этот адрес, даже в Pointer.

По идее, так же, как и у обычных процедур, только указатель на нужный объект первым параметром перед всеми остальными. Тут ещё надо помнить, что переменные процедурных типов вызываются как FAR, а по умолчанию процедуры компилируются как NEAR. Директиву FAR применительно к методам объектов TP не принимает. Либо они всегда FAR, либо это не предусмотрено. Можно попробовать компилировать с {$F+} на всякий случай.


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Цитата(Василий1488 @ 12.04.2014 1:40) *

Здравствуйте!
Возникла такая проблема:
Не могу присвоить процедурной переменной метод объекта (пишет неправильное использование функции)
На сколько помню, то в делфи для этого при объявлении проц. типа надо указать of object. Как это сделать в турбопаскале? Если никак, то где можно прочитать про то, как происходит вызов метода объекта (есть идея вызвать непосредственно по адресу, но как его заставить обработать нужный объект?)...
Заранее спасибо!

Для того, чтобы объявить класс на Pascal необходимо воспользоваться ключевым словом Object . Так как класс всегда является типом, делать это можно лишь в Type части программы:

Type
Class1 = Object
{список полей}
A: Byte;
V: Real;
{список методов}
Procedure Nothing(Var K: Byte);
End;
Легко заметить, что поля и методы (общее для них название - члены класса) объявляются очень похоже на поля записи и обычные процедуры/функции. Объекты класса объявляются так же, как и обычные переменные:

Var Object1, Object2: Class1;
Соотвенно, доступ к полям объекта некоторого класса производится аналогично доступу к полям записи:

Object1.V:= Object2.A;
Обращение к методам класса производится аналогичным образом:

Object1.Nothing(Object1.A);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 23.05.2018 2:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"