Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.12;
Скачать: CL | DM;

Вниз

Как получить адрес объекта из метода этого же объекта?   Найти похожие ветки 

 
vico ©   (2007-07-13 10:17) [0]

Подскажите, пожалуйста, как (и можно ли) получить указатель на экземпляр класса внутри метода этого класса? Я пытался сделать что-то вроде @Self, но значение указателя получается "левое".


 
Сергей М. ©   (2007-07-13 10:18) [1]

Просто Self, без предшествующего "барана"


 
vico ©   (2007-07-13 10:26) [2]

Но просто Self -- это не тот тип: TMyClass вместо ^TMyClass. Приведение PMyClass(Self) тоже дает неудовлетворительный результат -- пробовал... Может, есть другие варианты?


 
Сергей М. ©   (2007-07-13 10:31) [3]


> просто Self -- это не тот тип


Как это "не тот" ?

Судя по


> получить указатель на экземпляр класса внутри метода этого
> класса


это как раз то что тебе нужно - Self и есть указатель на текущий объект.


 
Ega23 ©   (2007-07-13 10:31) [4]


> Может, есть другие варианты?


Есть 2:
1. Читать книжку.
2. Если 1 не поможет - LMD.


 
Инс ©   (2007-07-13 10:32) [5]

А зачем объявлять тип указателя на указатель?


 
DVM ©   (2007-07-13 10:33) [6]


> Но просто Self -- это не тот тип: TMyClass вместо ^TMyClass

зачем тебе такая ерунда? указатель на указатель?


 
{RASkov} ©   (2007-07-13 10:34) [7]

> [2] vico ©   (13.07.07 10:26)

procedure TForm1.Button1Click(Sender: TObject);
var I, K: Integer;
begin
 I:=Integer(@Self);
 K:=Integer(Self);
 ShowMessage(Format("I:=%d, K:=%d", [I, K]));
 TForm(K).Close;
end;


 
Ega23 ©   (2007-07-13 10:35) [8]


> зачем тебе такая ерунда? указатель на указатель?


А он не знает, что переменная класа это и есть указатель.


 
Сергей М. ©   (2007-07-13 10:39) [9]


> vico ©   (13.07.07 10:26) [2]


Посмотри внимательно на

showmessage(inttostr(sizeof(@self)));
showmessage(inttostr(sizeof(self)));

Удивись)


 
Инс ©   (2007-07-13 10:47) [10]


> А он не знает, что переменная класа это и есть указатель.


Теперь будет знать. Экземпляры классов живут в куче, а не в стеке, а переменная классового типа - это всего лишь указатель на них. А метод класса отличается от обычной процедуры или функции как раз тем, что в него неявно передается еще один параметр - ссылка на экземпляр, чей метод выполняется. Это и есть тот самый Self.


 
vico ©   (2007-07-13 11:16) [11]

Спасибо всем! Действительно, не знал и "буду знать". Учился и читал книжки еще в период Turbo Pascal 5.5, поэтому и пытаюсь все делать в логике "старых добрых" объектов с указателями на них. Спасибо за урок -- переучиваюсь...


 
Ega23 ©   (2007-07-13 11:20) [12]


> Спасибо всем! Действительно, не знал и "буду знать". Учился
> и читал книжки еще в период Turbo Pascal 5.5, поэтому и
> пытаюсь все делать в логике "старых добрых" объектов с указателями
> на них. Спасибо за урок -- переучиваюсь...


Бери Тексейру и - успехов!


 
Anatoly Podgoretsky ©   (2007-07-13 11:40) [13]


> Учился и читал книжки еще в период Turbo Pascal 5.5, поэтому
> и пытаюсь все делать в логике "старых добрых" объектов с
> указателями на них.

Вот про это и надо забыть, объектная модель другая.


 
TUser ©   (2007-07-13 12:56) [14]

Впрочем, object до сих пор работает.



Страницы: 1 вся ветка

Текущий архив: 2007.08.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.027 c
2-1184611472
bagos
2007-07-16 22:44
2007.08.12
chart


1-1180686550
Inna_Z
2007-06-01 12:29
2007.08.12
Как послать e-mail с русским текстом.


2-1184074536
Xion
2007-07-10 17:35
2007.08.12
Проблема с потоком.


15-1182677885
tesseract
2007-06-24 13:38
2007.08.12
ММП - пора наконец!


15-1184662508
boriskb
2007-07-17 12:55
2007.08.12
А ты годишься в учителя новейшей истории?