Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатели на методы 
V
    Опции темы
bems
Дата 28.1.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Christoph, а, ну это нужно когда уведомление (о, например, щелчке мышкой) должен получить не только пользовательский код (например форма), а и дочерний класс. Для этой цели базовай класс вызывает виртуальный метод Click. В реализации этого базового класса этот метод просто вызывает обработчик события (на который ссылается поле процедурного типа). А когда кто-то наследует класс от этого базового класса и тоже хочет как-то реагировать на щелчек - он перекрывает виртуальный метод (Click). В своем перекрытом варианте он делает свою реакцию на нажатие и дальше перед ним встает вопрос, вызывать ли унаследованый метод. Если он хочет чтобы был вызван обработчик, естановленый в OnClick и сделана другая (если есть) работа базового класса, то он вызывает унаследованый метод так
Код

inherited Click; 



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Christoph
Дата 28.1.2009, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



Спасибо, я все понял спасибо всем  smile 


--------------------
user posted image
PM MAIL ICQ   Вверх
Rasool
Дата 16.8.2011, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 4.6.2011

Репутация: нет
Всего: нет



Хочу сделать в классе указатель на функцию и инициализировать его ссылкой на функцию. Сделал, как в здесь:
Код

type
  ThresFunc = function(d: Double): Double;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    function Thres (d: Double): Double;
    { Private declarations }
  public
    { Public declarations }
  end;

  TNeuron = class (TElement)
     Threshold: ThresFunc; 
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function TForm1.Thres(d: Double): Double;
var th: Double;
begin
  th := 0;
  if (d < th) then Thres := -1
  else Thres := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var neuron: TNeuron;
begin
  neuron := TNeuron.Create;
  neuron.Threshold := Thres; // Здесь выдает ошибку
end;

При компиляции выдает ошибку в 36-й строчке: E2009 Incompatible types: 'regular procedure and method pointer'

Это сообщение отредактировал(а) Rasool - 16.8.2011, 20:05
PM MAIL   Вверх
CodeMonkey
Дата 17.8.2011, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Читать эту тему с начала. Всё разжёвано.

Christoph понял и вы сможете.

Можно ещё почитать это: http://www.gunsmoker.ru/2008/12/static-delphi.html


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Rasool
Дата 17.8.2011, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 4.6.2011

Репутация: нет
Всего: нет



Решил, что мне нужно реализовать указатель на функцию, а не на метод. Спасибо за ссылку.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.