Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

Сравнение объектов   Найти похожие ветки 

 
AleX200411   (2004-11-22 11:00) [0]

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

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


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


 
Gero ©   (2004-11-22 11:02) [1]

Что значит "сравнить"?


 
begin...end ©   (2004-11-22 11:04) [2]


> AleX200411   (22.11.04 11:00)


> if object1 <> object2 then

Наверное, здесь сравниваются адреса.


 
AleX200411   (2004-11-22 11:05) [3]

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


 
ggs   (2004-11-22 11:17) [4]

CompareMem(...)


 
Digitman ©   (2004-11-22 11:26) [5]


> AleX200411


вот у тебя, к примеру, в кармане лежат некие две монеты.

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


 
Мастер ©   (2004-11-22 12:16) [6]

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

Это означает, что тебе надо сравнить 2 ссылки на один и тот же объект.

Т.е. сравнение if Object1=Object2 вполне корректно и должно работать.


 
TUser ©   (2004-11-22 12:30) [7]


> Т.е. сравнение if Object1=Object2 вполне корректно и должно
> работать

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


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

TUser ©   (22.11.04 12:30) [7]

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


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


 
TUser ©   (2004-11-22 13:03) [9]

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

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


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

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

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

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


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

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


 
WondeRu ©   (2004-11-22 13:15) [12]

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

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

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


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

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) не будут равны


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

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


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

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


 
WondeRu ©   (2004-11-22 13:27) [16]

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

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


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

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


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


В примере:

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

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


 
Gero ©   (2004-11-22 13:30) [18]

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


 
Digitman ©   (2004-11-22 13:30) [19]


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


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

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


 
Gero ©   (2004-11-22 13:30) [20]


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

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


 
begin...end ©   (2004-11-22 13:33) [21]


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


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

Почему?


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


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

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


 
begin...end ©   (2004-11-22 13:37) [23]


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

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

var
 SL1, SL2: TStringList;

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

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


 
Gero ©   (2004-11-22 13:39) [24]


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

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


 
Anatoly Podgoretsky ©   (2004-11-22 13:46) [25]

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

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


 
begin...end ©   (2004-11-22 13:47) [26]


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

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


 
Gero ©   (2004-11-22 14:01) [27]


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

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



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

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.029 c
1-1101079371
TechnoDreamer
2004-11-22 02:22
2004.12.05
Удаление ветки с дочерними элементами TTreeView


8-1094308103
AndersoNRules
2004-09-04 18:28
2004.12.05
Flash &amp; Delphi


6-1095988913
xoms
2004-09-24 05:21
2004.12.05
Winsock


4-1098449860
Shiza
2004-10-22 16:57
2004.12.05
Некоторые программы умеют форматировать дискеты под размер 1,72 М


1-1100953729
гость
2004-11-20 15:28
2004.12.05
компонент на основе Edit