Главная страница
    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.035 c
8-1094542811
Nomolos
2004-09-07 11:40
2004.12.05
Как без классов и mmsystem узнать длину midi?


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


14-1099343515
ИМХО
2004-11-02 00:11
2004.12.05
Фетисов отправляет Колоскова в отставку!


14-1100464788
SergP
2004-11-14 23:39
2004.12.05
Задачи для программистов. :-))


14-1099305727
Юрий Федоров
2004-11-01 13:42
2004.12.05
Вакансия в москве





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