С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/74: Рейтинг темы: голосов - 74, средняя оценка - 4.68
KBAC
2 / 2 / 1
Регистрация: 10.05.2010
Сообщений: 72
1

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

12.12.2010, 19:59. Просмотров 13655. Ответов 11
Метки нет (Все метки)

Скажите, как перегрузить оператор сравнения == и другие? попробовал
C++
1
bool operator == (char* A,char* B)
выдает : оператору ,не являющемуся членом, требуется параметр с класса перечисляемого типа.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2010, 19:59
Ответы с готовыми решениями:

Перегрузка оператора сравнения
Посмотрите, пжл, правилен ли синтаксис перегрузки оператора сравнения для двух...

Перегрузка оператора сравнения
Перегрузка: bool Zakaz::operator==(Zakaz&B) {...

Перегрузка оператора сравнения и сортировка
Имеется класс строка на основе vector<char>. У меня не получается перегрузить...

Перегрузка оператора сравнения. Вектор
Здравствуйте. Допустим есть класс. class Sector { private: int...

Перегрузка оператора сравнения для строк
В общем мне нужно сделать такую перегрузку, что бы вместо символа, например,...

11
Somebody
2802 / 1613 / 251
Регистрация: 03.12.2007
Сообщений: 4,215
Завершенные тесты: 3
12.12.2010, 20:55 2
Вообще так, только для стандартных типов перегрузить нельзя.
0
KuKu
1559 / 1037 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
12.12.2010, 21:05 3
надо так
C++
1
bool operator== (char* A)
И код весь надо, ошибка скорее о чем то другом говорит.
0
silent_1991
Эксперт С++
5011 / 3071 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
12.12.2010, 21:33 4
KuKu, не обязательно, если операция перегружается глобально, то она имеет два операнда. Фишка в том, что, судя по всему, ТС пытается перегрузить операцию для операндов встроенных типов (два операнда типа char *), чего делать нельзя, один операнд обязательно должен быть определённого пользователем типа.
1
KBAC
2 / 2 / 1
Регистрация: 10.05.2010
Сообщений: 72
12.12.2010, 21:42  [ТС] 5
я тело еще не писал для этого варианта, решил подождать.
а вообще как то странно получается что нельзя для двух типов char* перегрузить, мне надо сравнить две строки, чтобы они полностью совпадали, а С++ не может этого позволить , не правильно как то. если знаете функцию которая такое сравнение осуществляет, подскажите .
0
silent_1991
Эксперт С++
5011 / 3071 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
12.12.2010, 22:00 6
KBAC, strcmp()
А вообще, если так судить, то С++ много чего не может вам позволить, например, создавать собственные операции, менять мощность, ассоциативность, арность операций... Так что, выбросить его теперь на помойку?
1
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. возможно это бред
1
silent_1991
Эксперт С++
5011 / 3071 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
12.12.2010, 22:04 8
Barok, ага, бред)))
Лучше создать класс строк и в нём перегрузить оператор сравнения, зачем для этого так мучить оператор присваивания?
0
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;
};
1
KBAC
2 / 2 / 1
Регистрация: 10.05.2010
Сообщений: 72
12.12.2010, 22:15  [ТС] 10
так зачем вообще мучиться, если есть strcmp )) не, мне то надо что бы две строки лексикографически сравнивались. я думал оператор и перегрузить чтоб там посимвольно сравнивать, а не длины строк. Две строки у меня изначально вводятся в char[20] а потом сравниваются.

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

Добавлено через 1 минуту
KBAC, strcmp сравнивает в лексикографическом порядке. Возвращает значение меньше нуля, если первая строка меньше второй, 0 - если строки равны и больше нуля, если первая больше второй.
1
KBAC
2 / 2 / 1
Регистрация: 10.05.2010
Сообщений: 72
12.12.2010, 22:28  [ТС] 12
елки палки, начал проверять почему в этом моенте постоянно идет по ветке "да"
C++
1
if(!strcmp(gamers[igrok1].name,"Вася"));
хорошо,нашел косяк, теперь все работает как надо
0
12.12.2010, 22:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2010, 22:28

Перегрузка оператора сравнения (==) для массивов
Имеется класс-массив. Нужно сравнить два массива при помощи перегрузки...

Перегрузка оператора сравнения для указателя на объект
Имеется класс такого плана: template &lt;class T&gt; class Node{ private: T...

Перегрузка оператора сравнения (сравнивать только по одному полю)
Помогите пожалуйста. совсем не выходит перегрузить оператор == класса Book так,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru