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

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

Сравнение объектов [D5, Win2k]


Страницы:   1 2

AleX200411 ©   (2004-11-22 11:00:00) 

Всем добрый день! Такой вопрос: как правильно сравнить два объекта в Delphi, если обычное

if object1 <> object2 then
begin
//...
end;


не работает?
Может сужествует более корректное сравнение для объектов?


Gero   (2004-11-22 14:01:00) [1]


> Но в этом случае вопрос автора становится вообще некорректным.

Вот и я об этом. Ждем автора.


begin...end   (2004-11-22 13:47:00) [2]


> [24] Gero ©   (22.11.04 13:39)

Возможно. Вот я тут посмотрел определение Борланда: Objectsare dynamically allocated blocks of memorywhose structure is determined by their class type. A variable of a class typeis actually a pointerthat references an object. То есть если считать SL1 и SL2 объектами, тогда прав я. Если же SL1 и SL2 считать переменными классового типа, то тогда прав ты. Но в этом случае вопрос автора становится вообще некорректным.


Anatoly Podgoretsky   (2004-11-22 13:46:00) [3]

AleX200411   (22.11.04 11:05) [3]
Сравнить, т.е. когда оба объекта ссылаются на один и тот же участок памятии содержат идентичный код.

Только это и if object1 <> object2 thenотвечает на вопрос, поскольку это не объекты, а именно указатели на участок памяти.
Правда попутно встречный вопрос, как можно в одну ячейку поместить два разных значения в один и тот же интервал памяти.


Gero   (2004-11-22 13:39:00) [4]


> begin...end ©   (22.11.04 13:37)

Это только один объект, и два указателя на него.


begin...end   (2004-11-22 13:37:00) [5]


> [22] Gero ©   (22.11.04 13:34)

Возможно, с его точки зрения они будут одинаковыми в этом случае:

var
 SL1, SL2: TStringList;

begin
 SL1 := TStringList.Create;
 SL2 := SL1
end.

Но я не уверен, поскольку, как я уже говорил, не совсем понятна вторая часть условия: "содержат идентичный код".


Gero   (2004-11-22 13:34:00) [6]


> begin...end ©   (22.11.04 13:33)

Приведи пример, когда два объекта будут одинаковы с точки зрения автора.


begin...end   (2004-11-22 13:33:00) [7]


> [20] Gero ©   (22.11.04 13:30)


> С точки зрения автора вопросы, одинаковых объектов вобще
> нет.

Почему?


Gero   (2004-11-22 13:30:00) [8]


> Именно с точки зрения автора вопроса.

С точки зрения автора вопросы, одинаковых объектов вобще нет.


Digitman   (2004-11-22 13:30:00) [9]


> 2 синих крокодила идентичны


совершенно сзади.
но это - 2 разных крокодила !
хоть и синие они оба и летят они в разные стороны..

так что не тяни тему в "потрепаться" - авось она автору и здесь отнюдь небесполезна будет


Gero   (2004-11-22 13:30:00) [10]

Вы уж извините меня, ламера жалкого, но такого, чтобы объект ссылался на какой-то участок памяти, я не встречал.


begin...end   (2004-11-22 13:28:00) [11]

Смотрим задание автора вопроса:


> Сравнить, т.е. когда оба объекта ссылаются на один и тот
> же участок памяти и содержат идентичный код.


В примере:

> SL1:=TStringList.Create;
> SL2:=TStringList.Create;

SL1 и SL2 ссылаются на разные участки памяти. Первое условие ("ссылаются на один и тот же участок памяти") не выполняется. Второе условие ("содержат идентичный код") не совсем понятно, однако выполнение или невыполнение его уже не важно, т.к. (False and True) = (False and False) = False. Следовательно, SL1 и SL2 - разные. Именно с точки зрения автора вопроса.


WondeRu   (2004-11-22 13:27:00) [12]

Gero ©   (22.11.04 13:25) [15]
читаем:

AleX200411   (22.11.04 11:05) [3]
Сравнить, т.е. когда оба объекта ссылаются на один и тот же участок памяти и содержат идентичный код.


Gero   (2004-11-22 13:25:00) [13]

Для начала неплохо бы услышать определение одинаковости для двух объектов.
Судя по мнению Мастер ©, два объекта одинаковы только в том случае, если это один объект.


Мастер   (2004-11-22 13:18:00) [14]

TUser ©   (22.11.04 13:15) [11]
Может не стоит ерунду?


WondeRu   (2004-11-22 13:18:00) [15]

TUser ©   (22.11.04 13:15) [11]
2 синих крокодила идентичны, даже если они летят в разные стороны

пора уже в потрепалово!

TUser ©   (22.11.04 13:03) [9]
SL1:=TStringList.Create;
SL2:=TStringList.Create;

С данной точки зрения SL1 И SL2 одинаковы.

не совсем так... действительно же вы создаете два экземпляра одного класса, которые поместятся в разные участки памяти! соотвественно указатели на экземпляры классов (SL1 И SL2) не будут равны


WondeRu   (2004-11-22 13:15:00) [16]

TUser ©   (22.11.04 13:03) [9]
С данной точки зрения SL1 И SL2 одинаковы.

не согласен!
Мастер ©   (22.11.04 13:06) [10]
с любой точки зрения.

не согласен! эт скока выпьешь! ;)


TUser   (2004-11-22 13:15:00) [17]

2 синих крокодила идентичны, даже если они летят в разные стороны


Мастер   (2004-11-22 13:06:00) [18]

TUser ©   (22.11.04 13:03) [9]
С данной точки зрения

С какой с данной точки зрения?

Это разные объекты с любой точки зрения.


TUser   (2004-11-22 13:03:00) [19]

SL1:=TStringList.Create;
SL2:=TStringList.Create;

С данной точки зрения SL1 И SL2 одинаковы.


Мастер   (2004-11-22 12:31:00) [20]

TUser ©   (22.11.04 12:30) [7]

> А если переменные ссылаются на разные участки памяти,
> но в остальном они одинаковы?


Тогда это 2 разныхобъекта


Страницы:   1 2

Наверх

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