Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

Self^   Найти похожие ветки 

 
TUser ©   (2004-09-22 12:35) [0]

Почему нельзя написать Self^ или Form1^, если это вроде бы обычные указатели (на объекты)?


 
Cobalt ©   (2004-09-22 12:54) [1]

Формально - это не указатель, а переменная.
Можно только с указателями на класс проделывать такие фишки типа
type
 Class1=Class
 end;
 PClass1=^Class1;

var c:PClass1;
    s:string;
begin
c:=@Class1.create;
try
s:=c.ClassName;
s:=c^.ClassName;


правда, этот примерчик глючит чего-то, но компилируется без ошибок ;)


 
MBo ©   (2004-09-22 12:54) [2]

>это вроде бы обычные указатели (на объекты)?
Формально - нет
Где ты видел, чтобы TObject был определен как ^НаЧтоТо?
Ведь разыменование разрешено только для типа Pointer и типов с крыжиком ^TSomeType.


 
TUser ©   (2004-09-22 12:58) [3]

Любой указатель - это переменная.

Ведь все объекты в ObjectPascal - динамические. Можно ведь написать if Self <> nil then, сам Борланд так пишет. Т.е. работает с ними, как с указателями. Аналогично, можно написать Form1:=nil или Form1:=TForm1(Item.Data^), т.е. приводить тип произвольного указателя к своему типу. Только почему-то операция ^ для объектов не определена.


 
simpson ©   (2004-09-22 13:00) [4]

Это не указатели, а ссылки на объекты. А ссылки в тем и отличаются от указателей в использовании, что их не надо разыменовывать.


 
simpson ©   (2004-09-22 13:03) [5]

> TUser ©   (22.09.04 12:58) [3]
> Ведь все объекты в ObjectPascal - динамические

Неправда. Записи, например, очень даже статические. Да и перменные простых типов тоже.

Как ни странно, но лучше это все начинает пониматься после изучения основ .NET - там все очень похоже.


 
Amoeba ©   (2004-09-22 13:03) [6]


> TUser ©   (22.09.04 12:35)


> TUser ©   (22.09.04 12:58) [3]

Читай любой учебник по ObjectPascal. В Delphi синтаксис обращения к полям объектов изменился по ставнению с тем, как это было в TurboPascal. Явного разыменовывания для объектов теперь нет.


 
TUser ©   (2004-09-22 13:19) [7]


> . Записи, например, очень даже статические

Я про объекты говорил.

Учебники я читал. Мне непонятно, почему так сделано, что одни операции, определенные для указателей, применимы к объектам, а другие - нет.


 
Amoeba ©   (2004-09-22 13:22) [8]


> TUser ©   (22.09.04 13:19) [7]

Все вопросы к Borland"у.

IMHO это сделано для удобства.


 
Amoeba ©   (2004-09-22 13:28) [9]

Раз теперь объекты (новой модели) только ДИНАМИЧЕСКИЕ, то сам посуди, нафига нужно использовать форму записи Oblect^? Тем более, что никакая арифметика с указателями на них просто бессмысленна.


 
TUser ©   (2004-09-22 13:43) [10]

Это так


 
MANGOL   (2004-09-22 13:56) [11]

A variable of a class type is actually a pointer that references an object. Hence more than one variable can refer to the same object. Like other pointers, class-type variables can hold the value nil. But you don’t have to explicitly dereference a class-type variable to access the object it points to. For example, SomeObject.Size := 100 assigns the value 100 to the Size property of the object referenced by SomeObject; you would not
write this as SomeObject^.Size
:= 100.

Delphi help

тоесть, вы НЕ ДЛЖНЫ разыменовывать, и всё тут.


 
Amoeba ©   (2004-09-22 13:57) [12]

Вопрос похоже исчерпан. Пора закрывать ветку или отправлять в "Потрепаться".


 
TUser ©   (2004-09-22 15:01) [13]

Да, не рассказал нам Борланд, почему он так решил. Ну ладно. Будем писать как и раньше, без ^


 
DiamondShark ©   (2004-09-22 17:03) [14]

А можно нескромный вопрос?
Зачем так писать?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
3-1094635449
Сергей Ю.
2004-09-08 13:24
2004.10.10
Запрос логина и пароля при подключении к бд


4-1094559475
kblc
2004-09-07 16:17
2004.10.10
Как для TRichEdit ...


1-1095943162
Erik1
2004-09-23 16:39
2004.10.10
Как создать функцию возвращающею разные типы?


14-1095775437
Cosinus
2004-09-21 18:03
2004.10.10
FAQ


4-1094119684
Rudis
2004-09-02 14:08
2004.10.10
Как выполнить финанльные операции в DLL пр ее выгрузке из памяти?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский