![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Gunslinger |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Привет. Пример класса (для компактности писал сделал все в одном файле:
В исходном коде будет нечто вроде:
НО! Мне нужно отдельно сравнивать адреса и значения и, соответственно, выводить разный текст, напр.:
Как написать перегрузку на сравнение адреса/текста, напр.:
, но как это показать в перегрузке сравнения? |
||||||||
|
|||||||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
для этого тебе подойдет обычная функция
mrbrooks, тогда у него тут неправильно работать будет Это сообщение отредактировал(а) Alek86 - 13.10.2008, 10:01 |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
если у тебя метод возвращает строки - то соответсвенно тогда сравнивай как строки - strcmp для char. Ты в чем пишешь?
|
|||
|
||||
| DjoNIK |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 28.9.2006 Где: Питер/Георгиевск Репутация: 4 Всего: 5 |
Для начала было бы неплохо
Создать отдельно структуру адрес, и там перегрузить сравнение. В Итоге будет что-то вроде
Это сообщение отредактировал(а) DjoNIK - 13.10.2008, 10:04 -------------------- - Плесни-ка мне холодного кипятку. - Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды? - Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку. (разговор петербуржца и москвича) |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
кстати Gunslinger, лучше опреатор сравнения определять так (с констами)
и вообще слово конст использовать настолько часто, насколько это возможно |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
Alek86, ну если строки сравнивает - то можно и так - только если у типа строк перегружен оператор сравнения, либо функцию заюзать для этого типа.
|
|||
|
||||
| DjoNIK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 28.9.2006 Где: Питер/Георгиевск Репутация: 4 Всего: 5 |
Alek86, топик выше и метод тоже const
-------------------- - Плесни-ка мне холодного кипятку. - Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды? - Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку. (разговор петербуржца и москвича) |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
Добавлено через 5 минут и 32 секунды Вообще для начала нужно определиться какой тип возвращает метод GetAdr() Добавлено через 6 минут и 22 секунды Скорее всего целый |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
не понял. вроде все правильно, по умолчанию в привейт ставится. mrbrooks, ситуация такая. Есть набор ячеек (MyCels Cell1, Cell2, ...), у каждой ячейки есть адрес и значение. У каждого объекта свой адрес и значение. Задача: проверить, совпадают ли адреса и значения 2х объектов. И GetAddr(), и GetText() возвращают логическое значение. А в главной программе делается обычный if на сравнение адресов и значений 2х объектов. зы не понимаю, зачем разделять адрес и все остальное ззы делаю в билдере. |
|||
|
||||
| DjoNIK |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 28.9.2006 Где: Питер/Георгиевск Репутация: 4 Всего: 5 |
-------------------- - Плесни-ка мне холодного кипятку. - Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды? - Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку. (разговор петербуржца и москвича) |
||||
|
|||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
Если логическое значение то
должно прокатить. |
|||
|
||||
| DjoNIK |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 28.9.2006 Где: Питер/Георгиевск Репутация: 4 Всего: 5 |
С ростом функционала может потребоваться разбиение. Да и вообще, если ты думаешь о ЧЕМ-ТО как о самостоятельной сущности, то желательно это ЧТО-ТО выделить в класс. А адрес, как я понимаю, и есть такая сущность. Добавлено через 3 минуты и 39 секунд mrbrooks, во-первых не прокатит, ибо
Во вторых, если
Добавлено через 6 минут и 17 секунд И только сейчас задумался... Как так. Ты у ячейки c1 получаешь адрес, то почему у тебя возвращаеться логическое значение. Что оно означает? Как-то странно. -------------------- - Плесни-ка мне холодного кипятку. - Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды? - Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку. (разговор петербуржца и москвича) |
||||||
|
|||||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Да, с разным текстом. Есть вариант возвращать int: 0 - ок, 1- несовпадение адреса, 2 - несовпадение текста. Но по мне этот вариант нехороший. Гораздо понятнее работать с каждым отдельно. Но как перегрузить один и тот же оператор для методов?
DjoNIK, спасибо за поправку. Добавлено через 3 минуты и 43 секунды
так далеко продумывать не могу. можешь какой-нибудь пример на вскидку? Добавлено через 6 минут и 3 секунды DjoNIK, дав вроде логично. Сравниваются x,y объектов. Если они одинаковы - возвращается true. Так же с текстом. Добавлено через 8 минут и 52 секунды блин. с GetAddr и GetText перемудрил. У методов же есть доступ к закрытым членам... У меня ту немного каша, потому что еще думаю сделать замену координат из главной программы. |
|||
|
||||
| DjoNIK |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 28.9.2006 Где: Питер/Георгиевск Репутация: 4 Всего: 5 |
хорошее правило. Ведь со временем тебе нужно будет активно работать с твоими "ячейками". Интерфейс доступа будет разрастаться. В нем ты можешь запутаться. Если не ты сам, то пользователь твоего класса. Еще один вариант - случай, когда выполняя операции с ячейкой ты будешь работать с двумя "непонятыми" (или понятными только тебе) int-ми, довольно неприятный. Другое дело - обрабатывать i и j как единое целое. Да и необходимость в коментарий вида
отпала бы сама собой. -------------------- - Плесни-ка мне холодного кипятку. - Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды? - Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку. (разговор петербуржца и москвича) |
||||
|
|||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
DjoNIK, зачем делать в данном случае постоянную функцию-член? просто для красного словца? как эта функция изменит вызывающий ее объект? обоснуй пожалуйста.
ибо прокатит - так как автор сказал |
|||
|
||||
| DjoNIK |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 28.9.2006 Где: Питер/Георгиевск Репутация: 4 Всего: 5 |
Нет, для наглядности. Чтобы небыло соблазна, чтобы читающий объявления метода не глядя в определение мог понять все. Может тогда и в
можно обойтись без const? Мы ведь все-равно не меняем объект переданный по ссылке. это ты говорил про использование const по-возможности везде Добавлено через 4 минуты и 36 секунд не прокатит, ибо, судя по первому посту, автор собирался сравнивать адреса через метод GetAddr(), а значения ячеек через
-------------------- - Плесни-ка мне холодного кипятку. - Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды? - Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку. (разговор петербуржца и москвича) |
||||
|
|||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
я не имел ввиду использовать постоянную функцию-член. Дело в том что и использования const в сигнатуре функции при сравнение результата метода GetAddr() даст ошибку при компиляции. По этому рабочий вариант как раз будет тот что я давал в начале а именно:
Что бы использовать const в сигнатуре функции нужно обращаться уже не к методам класса а к его элементам определяющим результат метода GetAddr(). |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Парни, погодите! Я похоже всех нас запутал! (1)Можно перегрузить == и в нем проверять сразу и адреса, и текст. (2)Можно разнести это сравнение (чтобы в главной программе опредилить, что именно не совпало и выдать соответствующее предупреждение). Чтобы реализовать 2, нужно 2 раза перегрузить ==.
Код можно написать как в разных перегрузчиках, так и в методах, которые будут вызываться этими перегрузчиками. Вроде так. Тогда какой вариант выбрать, чтобы разделить одно от другого? == - это не текст, и аргументы - целые объекты. Может сделать эти GetAddr() и GetText() и запихнуть в один ==, но при этом передавая еще один аргумент - флаг, что именно сравниваем?
|
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
будьте проще :
Это сообщение отредактировал(а) mes - 13.10.2008, 17:13 |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
Gunslinger, так я не понял, зачем тебе вообще этот == сдался? операторы только для удобства добавлены, не более, и пытаться весь свой код под них подстраивать не нужно
или создай функцию, как я тебе в 3м посте написал или сделай, как посоветовал mes |
|||
|
||||
| Gunslinger |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Большое спасибо за помощь. Со сравнением действительно уперся не в тему.
При компиляции пишет ошибки: [C++ Error] MyCells.h(8): E2303 Type name expected и [C++ Error] MyCells.h(8): E2303 Type name expected Вот описание:
Выдает ошибку на Address GetAddr(); Где-то ошибся. Реализация:
|
||||
|
|||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
структуру Address опиши в хидаре
|
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Описывал. Выдает кучу ошибок:
[C++ Error] MyCells.cpp(5): E2238 Multiple declaration for 'MyCells' [C++ Error] MyCells.h(10): E2344 Earlier declaration of 'MyCells' [C++ Error] MyCells.cpp(20): E2108 Improper use of typedef 'Address' и т.п., вытекающие следом. Описуха хедера:
Если за концом структуры убрать; пишет: [C++ Error] MyCells.h(10): E2176 Too many types in declaration и встает на class MyCells { Это сообщение отредактировал(а) Gunslinger - 14.10.2008, 13:42 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
из cpp вот это чудо
выкинь Добавлено через 1 минуту и 47 секунд в плюсах не разрешено разделенное определение класса так что класс MyCells собери в 1 (в ашнике) в cpp оставь реализации функций и вообще почитай учебник |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Alek86, убрал. только теперь опять вернулись к ошибкам моего утреннего поста:
[C++ Error] MyCells.h(8): E2303 Type name expected и [C++ Error] MyCells.h(8): E2139 Declaration missing ; Указывает на Address GetAddr(); в хедере. Почему private надо было удалить? Адресная структура должна быть открыта? А куда же девать String Text? |
|||
|
||||
| mrbrooks |
|
||||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
Gunslinger, ну удалять! а перенести.
Добавлено @ 14:53 здесь же все сказано Добавлено @ 14:56
Это сообщение отредактировал(а) mrbrooks - 14.10.2008, 14:57 |
||||
|
|||||
| Gunslinger |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
mrbrooks, добавления не было. сейчас зашел - увидел.
Alek86, почитаю, только прогу добью. Может я специздание Страуструпа не той стороной смотрел, но у него вроде в хедере - интерфейс, а в cpp - его реализация и приватные свойства. Вот готовые файлы: хедер:
реализация:
Ошибок 2. Закомментировал в код. Это сообщение отредактировал(а) Gunslinger - 14.10.2008, 16:17 |
||||
|
|||||
| Alek86 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
поменяй
и так далее |
||||
|
|||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
Gunslinger, камрад ты внимательно смотрел тот код который я тебе специально подправил?
|
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
ипать... лажаюсь и лажаюсь.
mrbrooks, респект. Alek86, mes, и уважуха!;) Тему закрыл. зы DjoNIK, тебя чуть не забыл. Тоже плюсанул в репу. Это сообщение отредактировал(а) Gunslinger - 14.10.2008, 16:51 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |