Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Указатель на самого себя.


Страницы:   1 2 3

@!!ex ©   (2007-10-10 16:14:00) 

Как можно получить в методе класса указатель на экземпляр для которого этот метод вызван?


Ins   (2007-10-10 17:12:00) [21]


> Не RTTI, а указатель на VMT.

Уболтал.


oxffff   (2007-10-10 17:01:00) [22]


> Ins ©   (10.10.07 16:43) [27]
>
> > После [11] уже не кажется...
>
> Да ладно, не знал человек, теперь будет знать. Буквально
> вчера обсуждалось, что в instance-методах - self - это указатель
> на экземпляр, чей метод выполняется, в class-методах - указатель
> на RTTI класса, в static class методах - self-а вообще нет.
>


Не RTTI, а указатель на VMT.


Ins   (2007-10-10 16:54:00) [23]


> А мне до сих пор и это казалось естественным и обсуждений
> не требующим.

Ну почему же. Вот я за D7 сижу и про static class function не знал. Для кого-то было в новинку, что self в class-function - это указатель не на экземпляр, а на информацию о классе. Ну а кто-то не знал даже то, что self это вообще указатель :)


homm   (2007-10-10 16:50:00) [24]

> [28] Иванов   (10.10.07 16:48)
> Обсуждалось ??? (!!!)

Дак вот же :)
http://www.delphimaster.ru/cgi-bin/forum.pl?n=3&id=1191913519


Иванов   (2007-10-10 16:48:00) [25]

> Ins ©   (10.10.07 16:43) [27]

Обсуждалось ??? (!!!)

А мне до сих пор и это казалось естественным и обсуждений не требующим.


Ins   (2007-10-10 16:43:00) [26]


> После [11] уже не кажется...

Да ладно, не знал человек, теперь будет знать. Буквально вчера обсуждалось, что в instance-методах - self - это указатель на экземпляр, чей метод выполняется, в class-методах - указатель на RTTI класса, в static class методах - self-а вообще нет.


Иванов   (2007-10-10 16:41:00) [27]

> Ins ©   (10.10.07 16:40) [25]

После [11] уже не кажется...


Ins   (2007-10-10 16:40:00) [28]


> До сих пор и мне так казалось...

А что, сейчас уже не кажется? :)


Иванов   (2007-10-10 16:39:00) [29]

> @!!ex ©   (10.10.07 16:33) [23]

Сам экземпляр объекта хранится в динамической памяти. Переменная ActiveCamera содержит адрес экземпляра - то есть, это уже указатель и есть. Локальная переменная Self тоже хранит адрес экземпляра, то есть это тоже уже и есть указатель.


@!!ex   (2007-10-10 16:33:00) [30]

Все. понял.
Спасибо за ликбез.


Иванов   (2007-10-10 16:30:00) [31]

> @!!ex ©   (10.10.07 16:29) [19]

И тип PCamera надо выбросить совсем. Не нужен.


Ins   (2007-10-10 16:30:00) [32]


> ActiveCamera:PCamera;

А зачем делать указатель на указатель? Сделай так:

ActiveCamera: TCamera;


Иванов   (2007-10-10 16:29:00) [33]

> @!!ex ©   (10.10.07 16:27) [18]

ActiveCamera: TCamera;

В SetCamera:
ActiveCamera := Self;


@!!ex   (2007-10-10 16:29:00) [34]

> Просто Self - это именно указатель. И именно на экземпляр
> класса. Никаких @ не требуется.

Хм.
Вот такое:
ActiveCamera:=Self;
Вызывает ошибку вида:
[Error] GamerUnit.pas(462): Incompatible types: 'TCamera' and 'PCamera'


@!!ex   (2007-10-10 16:27:00) [35]


> к тому же автор не первый день пишет на дельфи (вроде) и
> такую очевидную весч спрашивать бы не стал.

На дельфи хоть и давно пишу, с необходистью такое делать - не сталкивался, так что могу и глупость спрашивать, тем более, что знания ООП(как выяснилось) существенно ниже, чем хотелось бы.

Суть в том, что есть куча камер.
 
TCamera = class
 public
   v1,v2,v3,v4:TVector;
   Position:TVector;
   Direction:TVector;
   constructor Create;
   destructor  Destroy; override;
   procedure   SetCamera;
 end;


Есть глобальная переменная,
ActiveCamera:PCamera;
Через которую идет обращение к текущей камере.
Текущая камера может быть только одна естественно.

Нужно чтобы в ActiveCamera хранился указатель на послюднюю камеру, для который был вызван метод SetCamera.


Иванов   (2007-10-10 16:27:00) [36]

> Ins ©   (10.10.07 16:25) [16]

До сих пор и мне так казалось...


Ins   (2007-10-10 16:25:00) [37]


> Просто Self - это именно указатель. И именно на экземпляр
> класса. Никаких @ не требуется.

Естественно.


Иванов   (2007-10-10 16:25:00) [38]

> Суслик ©   (10.10.07 16:20) [12]

Тем более прискорбно. Особенно, после [11].


Иванов   (2007-10-10 16:21:00) [39]

> @!!ex ©   (10.10.07 16:19) [11]

Просто Self - это именно указатель. И именно на экземпляр класса. Никаких @ не требуется.


Суслик   (2007-10-10 16:21:00) [40]

сущай автор, привел бы ты код
тебя не пойщем чессо слово, что тебе надо.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо