| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > как сравнить свойство класса? |
| Автор: Gunslinger 16.10.2008, 08:34 | ||||||
| Привет. Преждевременно закрыл тему про перегрузку сравнения. Только сейчас добрался до сравнения. В мейне пишу:
Перегрузил ==, пишет тоже самое. В очередной раз немного хедера:
Реализация:
|
| Автор: Daevaorn 16.10.2008, 08:41 |
Как-то не вяжется. Вас просят для Address, а вы для MyCells реализовываете. Добавлено через 1 минуту и 15 секунд Тогда уж с1==с2 сравнивайте. |
| Автор: Rickert 16.10.2008, 09:48 |
Что это такое? |
| Автор: Gunslinger 16.10.2008, 10:09 |
горячичный бред. |
| Автор: bsa 16.10.2008, 11:53 | ||
|
| Автор: mes 16.10.2008, 12:15 | ||
oчепятка
|
| Автор: Gunslinger 16.10.2008, 14:29 | ||||
[C++ Error] MyCells.h(28): E2093 'operator==' not implemented in type 'Address' for arguments of the same type Я непонял
|
| Автор: mes 16.10.2008, 14:43 | ||||
оператор определен для сравнения двух объектов класса Address , а что Вы ему туда передатите эта Ваша задача - для функции безразлично лишь бы было право доступа(поэрому и объявлена френдом) Добавлено через 3 минуты и 10 секунд оператор сравнения объекта типа класса в котором он определен с объектом типа указанного в скобках (в данном случае типы совпадают) Добавлено через 5 минут и 13 секунд
такое у Вас на код который привел bsa ? |
| Автор: Gunslinger 16.10.2008, 15:01 | ||||||
да.
в коде:
Т.е. я передаю ему ссылку на адрес, по которому лежит объект класса. Далее перемещаюсь по пространству объекта в поисках структуры addr? |
| Автор: mes 16.10.2008, 15:10 | ||
забыто const
можно представить как if (c1.operator==(c2)).. |
| Автор: Gunslinger 16.10.2008, 15:40 | ||||||
Заработало.
строка пашет. Только я никак не воткну в эту:
Со сравнением адресов представляю: if(struct1==struct2), но с этой... Что с чем сравнивается? Почему без нее прога не компилится? Непонятное тело:
что мне теперь править?... блин. |
| Автор: mes 16.10.2008, 16:02 | ||||
мне кажется вы упустили что неявно передается указатель на себя, то есть код в "явном" виде выглядит так
Добавлено через 1 минуту и 52 секунды если заработало, то чего править? Добавлено через 3 минуты и 31 секунду Потому что компилятор не мог догадаться как провести сравнение.. |
| Автор: Gunslinger 16.10.2008, 16:20 | ||
Тогда понятно! Только по вашим словам я не понял: this - он передается по умолчанию всегда (исправленный по этому коду вариант навыдавал ошибок)? Как будто читал про указатель на себя. У Рамбо вроде, что каждый объект знает, чей он или вроде того... |
| Автор: mes 16.10.2008, 16:27 | ||||
Код приведенный в предыдущем топике нужен для понимания процесса - добавлять this к коду не нужно - это делает компилятор.
ага, для каждого сравнения своя функция . |
| Автор: Gunslinger 16.10.2008, 16:58 | ||
не врубился в код метода, вот и решил, что bsa набросал что в голову пришло.
детская боязнь вложенных функций. Последний вопрос: сравнение структур объявлено как самостоятельная функция, только в класс засунута. Чтобы в метод вложить функцию, эта функция не должна быть другим методом или другом класса? |
| Автор: mes 16.10.2008, 17:33 | ||
не понял куда засунута функция ) Метод эта та же функция которой неявно передается дополнительный параметр this |
| Автор: Gunslinger 16.10.2008, 18:03 |
| псевдокодом: класс А: свойство 1; свойство n; метод1: функция. метод n; друг; Вот про этот случай спрашивал. Вложенная в метод функция. Это функция может быть любой: метод того же класса (метод n), друг или только внешняя, как та, что структуры сравнивает? |
| Автор: mes 16.10.2008, 18:10 | ||
функция не вложена в метод - в методе просто происходит вызов внешней функции |
| Автор: Gunslinger 17.10.2008, 08:01 |
да, я это неправильно сказал. Внешняя функция может быть любой, даже другим методом? У Савитча что-то такого момента не припомю, у него только про обычные функции. |
| Автор: mes 17.10.2008, 10:17 | ||
Любой метод есть функция. В теле любой функции можно вызвать любую другую функцию, если есть право доступа и она находится в области видимости, и даже саму себя -рекурсия. |
| Автор: Gunslinger 17.10.2008, 13:36 | ||
Спасибо за помощь! Закрыто. |