![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Указатель на самого себя.
@!!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]сущай автор, привел бы ты код
тебя не пойщем чессо слово, что тебе надо.