Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2015, 21:15   #1
SomeOneAndrey
Пользователь
 
Регистрация: 28.06.2014
Сообщений: 20
По умолчанию Класс и указатель

Как из класса получить указатель на него?
@Self выдает некий адрес, что умирает после завершения конструктора. Необходимо при создании класса создать в нем поток, с указателем на этот же класс. Рабочий вариант пока что - передавать указатель на класс в конструкторе, но это не приемлимо
SomeOneAndrey вне форума Ответить с цитированием
Старый 26.12.2015, 21:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
			Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;

type
      TMyClass=class;

			{ TMyThread }

      TMyThread=class(TThread)
        public Me:TMyClass;
        protected procedure execute; override;
			end;

			 { TMyClass }

       TMyClass=class
         private
           MyThread:TMyThread;
         public
           constructor Create;

			 end;

			TForm1 = class(TForm)
			private
						{ private declarations }
			public
						{ public declarations }
			end;

var
			Form1: TForm1;

implementation

{$R *.lfm}

{ TMyClass }

constructor TMyClass.Create;
begin
  MyThread:=TMyThread.Create(true);
  MyThread.Me:=self;
  MyThread.Start;
end;

{ TMyThread }

procedure TMyThread.execute;
begin
 Me.Чего-то там
end;

end.
Я тебя правильно понял?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.12.2015, 04:02   #3
SomeOneAndrey
Пользователь
 
Регистрация: 28.06.2014
Сообщений: 20
По умолчанию

Отлично! Спасибо!
SomeOneAndrey вне форума Ответить с цитированием
Старый 28.12.2015, 00:14   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от SomeOneAndrey Посмотреть сообщение
Как из класса получить указатель на него?
@Self выдает некий адрес, что умирает после завершения конструктора. Необходимо при создании класса создать в нем поток, с указателем на этот же класс. Рабочий вариант пока что - передавать указатель на класс в конструкторе, но это не приемлимо
Не надо мудрить! Self и есть указатель на данный экземпляр класса, для которого и вызван метод класса.
northener вне форума Ответить с цитированием
Старый 28.12.2015, 10:37   #5
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
Self и есть указатель на данный экземпляр класса, для которого и вызван метод класса.
Ссылка, не указатель.
come-on вне форума Ответить с цитированием
Старый 28.12.2015, 10:53   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
Ссылка, не указатель.
Мы говорим указатель - подразумеваем ссылку. Мы говорим ссылка - подразумеваем указатель.
northener вне форума Ответить с цитированием
Старый 28.12.2015, 11:01   #7
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Подразумевать можно все что угодно, только это не одно и тоже, не всегда взаимозаменяемы.
come-on вне форума Ответить с цитированием
Старый 28.12.2015, 11:19   #8
taras-proger
Подтвердите свой е-майл
 
Регистрация: 12.11.2014
Сообщений: 470
По умолчанию

Цитата:
Сообщение от SomeOneAndrey Посмотреть сообщение
Как из класса получить указатель на него?
@Self выдает некий адрес, что умирает после завершения конструктора. Необходимо при создании класса создать в нем поток, с указателем на этот же класс. Рабочий вариант пока что - передавать указатель на класс в конструкторе, но это не приемлимо
А как из типа integer получить указатель на него? Указатели не получают из типов, они просто присваиваются. Если у тебя отработал конструктор, то создал или именованный объект, элемент именованного массива, или объект, который уже лежит по указателю. В первом случае всё просто:
Код:
type t=class
...
end;
...
var o:t;
    p:t^; {указатель на t, возможно здесь я переврал синтаксис}
...
begin
     p:=@o; {что сложного?}
, во втором случае похоже:
Код:
type t=class
...
end;
...
var o:array[1.. 32] of t;
    p:t^; {указатель на t, возможно здесь я переврал синтаксис}
...
begin
     p:=@(o[12]); {что сложного?}
, в третьем же случае указатель уже есть, даже если ты создал сразу массив безымянных объектов, то указатель на каждый из них вычисляется по указателю на весь массив, индексу элемента и sizeof класса.
taras-proger вне форума Ответить с цитированием
Старый 28.12.2015, 11:21   #9
taras-proger
Подтвердите свой е-майл
 
Регистрация: 12.11.2014
Сообщений: 470
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
Ссылка, не указатель.
Энто когда же в паскале и его потомках появились ссылки?
taras-proger вне форума Ответить с цитированием
Старый 28.12.2015, 11:38   #10
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
Энто когда же в паскале и его потомках появились ссылки?
вот как стали писать "type t=class" так тут же и появилось
come-on вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вложенный класс в шаблон. Указатель на вложенный класс в возвращаемом значении метода шаблона. Что делать? Asya1994 Помощь студентам 3 09.12.2012 01:43
не создается указатель на класс CodeNOT Общие вопросы C/C++ 4 04.01.2011 12:10
Указатель на абстрактный класс zhenya.ya Общие вопросы C/C++ 0 11.11.2010 23:51
Указатель на класс Колючка* Общие вопросы Delphi 8 21.01.2010 07:38
Вернут указатель на базовый класс Crucian Общие вопросы C/C++ 2 08.11.2007 18:10