Форум программистов, компьютерный форум CyberForum.ru

Перегрузка оператора сравнения - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 93, средняя оценка - 4.89
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
12.12.2010, 19:59     Перегрузка оператора сравнения #1
Скажите, как перегрузить оператор сравнения == и другие? попробовал
C++
1
bool operator == (char* A,char* B)
выдает : оператору ,не являющемуся членом, требуется параметр с класса перечисляемого типа.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
12.12.2010, 20:55     Перегрузка оператора сравнения #2
Вообще так, только для стандартных типов перегрузить нельзя.
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
12.12.2010, 21:05     Перегрузка оператора сравнения #3
надо так
C++
1
bool operator== (char* A)
И код весь надо, ошибка скорее о чем то другом говорит.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.12.2010, 21:33     Перегрузка оператора сравнения #4
KuKu, не обязательно, если операция перегружается глобально, то она имеет два операнда. Фишка в том, что, судя по всему, ТС пытается перегрузить операцию для операндов встроенных типов (два операнда типа char *), чего делать нельзя, один операнд обязательно должен быть определённого пользователем типа.
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
12.12.2010, 21:42  [ТС]     Перегрузка оператора сравнения #5
я тело еще не писал для этого варианта, решил подождать.
а вообще как то странно получается что нельзя для двух типов char* перегрузить, мне надо сравнить две строки, чтобы они полностью совпадали, а С++ не может этого позволить , не правильно как то. если знаете функцию которая такое сравнение осуществляет, подскажите .
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.12.2010, 22:00     Перегрузка оператора сравнения #6
KBAC, strcmp()
А вообще, если так судить, то С++ много чего не может вам позволить, например, создавать собственные операции, менять мощность, ассоциативность, арность операций... Так что, выбросить его теперь на помойку?
Barok
7 / 7 / 0
Регистрация: 07.12.2010
Сообщений: 49
12.12.2010, 22:01     Перегрузка оператора сравнения #7
Создай к примеру класс String, в котором динамически создашь строку. Потом перегрузи оператор присваивания к примеру в котором введёшь вторую строку и там сравнивай.
C++
1
2
3
4
5
6
7
8
9
10
String & String::operator =(const String &str){
    char *tmp=new char[256];
    cin.getline(tmp,256);
    if(strcmp(str,tmp)==0)
       cout<<"Stroki ravni"<<endl;
 
    else
      cout<<"Stroki ne ravni"<<endl;
    return *this;
};
P.S. возможно это бред
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.12.2010, 22:04     Перегрузка оператора сравнения #8
Barok, ага, бред)))
Лучше создать класс строк и в нём перегрузить оператор сравнения, зачем для этого так мучить оператор присваивания?
Barok
7 / 7 / 0
Регистрация: 07.12.2010
Сообщений: 49
12.12.2010, 22:08     Перегрузка оператора сравнения #9
Цитата Сообщение от silent_1991 Посмотреть сообщение
Barok, ага, бред)))
Лучше создать класс строк и в нём перегрузить оператор сравнения, зачем для этого так мучить оператор присваивания?
так а какая разница собсно какой оператор перегружать? тоже самое и с оператором сравнения ведь можно
C++
1
2
3
4
5
6
7
8
9
10
String & String::operator ==(const String &str){
    char *tmp=new char[256];
    cin.getline(tmp,256);
    if(strcmp(str,tmp)==0)
       cout<<"Stroki ravni"<<endl;
 
    else
      cout<<"Stroki ne ravni"<<endl;
    return *this;
};
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
12.12.2010, 22:15  [ТС]     Перегрузка оператора сравнения #10
так зачем вообще мучиться, если есть strcmp )) не, мне то надо что бы две строки лексикографически сравнивались. я думал оператор и перегрузить чтоб там посимвольно сравнивать, а не длины строк. Две строки у меня изначально вводятся в char[20] а потом сравниваются.

Добавлено через 59 секунд
Цитата Сообщение от Barok Посмотреть сообщение
так а какая разница собсно какой оператор перегружать? тоже самое и с оператором сравнения ведь можно
да и не запутаешься
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.12.2010, 22:18     Перегрузка оператора сравнения #11
Barok, оператор сравнения нужен не для того, чтобы в нём ещё и строку вводить, в этом бред. Суть в том, что у вас есть две строки, и вы их сравниваете, а тут получается, что чтобы сравнить две строки, одну из них обязательно придётся ввести заново.

Добавлено через 1 минуту
KBAC, strcmp сравнивает в лексикографическом порядке. Возвращает значение меньше нуля, если первая строка меньше второй, 0 - если строки равны и больше нуля, если первая больше второй.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2010, 22:28     Перегрузка оператора сравнения
Еще ссылки по теме:

C++ Перегрузка операторов сравнения и разницы. Класс String
C++ Перегрузка оператора сравнения для строк
C++ Перегрузка операторов сравнения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
12.12.2010, 22:28  [ТС]     Перегрузка оператора сравнения #12
елки палки, начал проверять почему в этом моенте постоянно идет по ветке "да"
C++
1
if(!strcmp(gamers[igrok1].name,"Вася"));
хорошо,нашел косяк, теперь все работает как надо
Yandex
Объявления
12.12.2010, 22:28     Перегрузка оператора сравнения
Ответ Создать тему
Опции темы

Текущее время: 13:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru