Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.041 c
1-1100967790
Matrex
2004-11-20 19:23
2004.12.05
TList и расход памяти


4-1098255997
Pop
2004-10-20 11:06
2004.12.05
TGraphic рисуется в серой палитре при рисовании на канве принтера


14-1100367534
Drakon
2004-11-13 20:38
2004.12.05
Послепятничная задача. Повторение - мать учения.


1-1101302963
Саша
2004-11-24 16:29
2004.12.05
Макроподстановка


1-1101107514
Гость
2004-11-22 10:11
2004.12.05
Подскажите как использовать rsync





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