Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизСравнение объектов Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.035 c