Форум: "Начинающим";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
ВнизКак получить адрес объекта из метода этого же объекта? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c