Главная страница
    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.042 c
2-1184846669
iviom
2007-07-19 16:04
2007.08.12
Распределение памяти в приложение


2-1184159539
Dr. Andrew
2007-07-11 17:12
2007.08.12
Как корректно переконвертировать PWideChar в WideString?


15-1184255892
Petr V. Abramov
2007-07-12 19:58
2007.08.12
А почему в Маскве


15-1184678519
Nous Mellon_
2007-07-17 17:21
2007.08.12
Как настроить .htaccess?


2-1184396614
Officeman
2007-07-14 11:03
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский