Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.047 c
11-1150264932
MZUser
2006-06-14 10:02
2007.08.12
Создание DLL


4-1172308669
plotn
2007-02-24 12:17
2007.08.12
Встроить элемент в shell-popup menu


6-1166522728
djon silver
2006-12-19 13:05
2007.08.12
HTTP Server


2-1184135112
Б.А.С.
2007-07-11 10:25
2007.08.12
Программный вход в систему


1-1181126227
oleg_teacher
2007-06-06 14:37
2007.08.12
как узнать на каком обекте нажата правая клавиша миши





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский