Главная страница
    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
15-1184214406
Riply
2007-07-12 08:26
2007.08.12
Владпута, Едрос.


2-1184181072
Скарамуш
2007-07-11 23:11
2007.08.12
Как узнать имя Picture


15-1184343965
SkySpeed
2007-07-13 20:26
2007.08.12
Объясните плиз работу 2-х ядерного процессора...


9-1157377908
Артём
2006-09-04 17:51
2007.08.12
OpenGL & 3DMax


15-1184400782
iZEN
2007-07-14 12:13
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский