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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 93, средняя оценка - 4.89
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
#1

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

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

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

Перегрузка оператора сравнения - C++
Перегрузка: bool Zakaz::operator==(Zakaz&B) { if(strcmp(Familia_Zak,B.Familia_Zak)==0 && Street ==B.Street && Dom == B.Dom && Kv ==...

Перегрузка оператора сравнения - C++
Посмотрите, пжл, правилен ли синтаксис перегрузки оператора сравнения для двух строк: #include <cstdio> class base { public: ...

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

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

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

Перегрузка оператора сравнения для указателя на объект - C++
Имеется класс такого плана: template <class T> class Node{ private: T data; //other stuff }; Внутри класса перегружены...

11
Somebody
2789 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
12.12.2010, 20:55 #2
Вообще так, только для стандартных типов перегрузить нельзя.
0
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,987
12.12.2010, 21:05 #3
надо так
C++
1
bool operator== (char* A)
И код весь надо, ошибка скорее о чем то другом говорит.
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.12.2010, 21:33 #4
KuKu, не обязательно, если операция перегружается глобально, то она имеет два операнда. Фишка в том, что, судя по всему, ТС пытается перегрузить операцию для операндов встроенных типов (два операнда типа char *), чего делать нельзя, один операнд обязательно должен быть определённого пользователем типа.
1
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
12.12.2010, 21:42  [ТС] #5
я тело еще не писал для этого варианта, решил подождать.
а вообще как то странно получается что нельзя для двух типов char* перегрузить, мне надо сравнить две строки, чтобы они полностью совпадали, а С++ не может этого позволить , не правильно как то. если знаете функцию которая такое сравнение осуществляет, подскажите .
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
12.12.2010, 22:15  [ТС] #10
так зачем вообще мучиться, если есть strcmp )) не, мне то надо что бы две строки лексикографически сравнивались. я думал оператор и перегрузить чтоб там посимвольно сравнивать, а не длины строк. Две строки у меня изначально вводятся в char[20] а потом сравниваются.

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

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

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

Сравнить два целых числа, не используя условного оператора, оператора выбора и так же символов сравнения - C++
Добрый день уважаемые программисты, хотелось, чтобы вы помогли мне в решении одной задачи, а именно подсказали идею решения. Задача...

Перегрузка операторов сравнения - C++
Вот этот класс. Помогите пожалуйста. #include &lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;cstring&gt; using namespace std; ...

Перегрузка операторов сравнения - C++
Всем здравствуйте. У меня не выходит перегрузка операторов сравнения для собственного тд, пытаюсь сделать так : bool operator==(myType...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
12.12.2010, 22:28
Ответ Создать тему
Опции темы

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