Главная страница
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.035 c
10-1135343150
granni
2005-12-23 16:05
2007.08.12
смена слайдов в PowerPoint


15-1184263774
wl
2007-07-12 22:09
2007.08.12
исходники zuma-like игр на с/c++


1-1180699210
DevilDevil
2007-06-01 16:00
2007.08.12
Frame.OldCreateOrder,PixelsPerInch,TextHeight. Откуда?


15-1184238783
Megabyte
2007-07-12 15:13
2007.08.12
Правила формирования xml-файлов


2-1184608505
Knob
2007-07-16 21:55
2007.08.12
Открытие файла