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

Оператор равенства - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
ramarren14
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
28.11.2011, 23:53     Оператор равенства #1
Я правильно понимаю что оператор равенства (==) нельзя перегрузить?
То есть если я напишу функцию:
C++
1
2
3
4
5
6
template<class T>
bool isEqualTo(const T& one,const T& two)
{
    if (one==two) return true;
    else return false;
}
Потом напишу класс Complex и создам два объекта: complex_one(1,1) и complex_two(1,1).
И на isEqualTo(complex_one,complex_two) компилятор заругается?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2011, 23:53     Оператор равенства
Посмотрите здесь:

C++ Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1
Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки C++
Проверка равенства символов. Оптимизировать код C++
C++ Не выполняется условие равенства переменной методу класса
Написать программу равенства двух треугольников по их сторонам C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
28.11.2011, 23:56     Оператор равенства #2
Цитата Сообщение от ramarren14 Посмотреть сообщение
Я правильно понимаю что оператор равенства (==) нельзя перегрузить?
Не правильно. Оператор== перегружается точно так же, как и любые другие операторы
Сыроежка
Заблокирован
29.11.2011, 00:01     Оператор равенства #3
Цитата Сообщение от ramarren14 Посмотреть сообщение
Я правильно понимаю что оператор равенства (==) нельзя перегрузить?
То есть если я напишу функцию:
C++
1
2
3
4
5
6
template<class T>
bool isEqualTo(const T& one,const T& two)
{
    if (one==two) return true;
    else return false;
}
Потом напишу класс Complex и создам два объекта: complex_one(1,1) и complex_two(1,1).
И на isEqualTo(complex_one,complex_two) компилятор заругается?
Сначала замечу, что вы могли бы проще реализовать свою функцию

C++
1
2
3
4
5
template<class T>
bool isEqualTo(const T& one,const T& two)
{
    return ( one == two );
}
Что касается вашего вопроса. то он не понятен. Вы продемонстрировали функцию с именем isEqualTo, а оператор сравнения - это функция с именем operator ==. Поэтому эти две функции никак между собой не конфликтуют.
ramarren14
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
29.11.2011, 00:01  [ТС]     Оператор равенства #4
В такой форме?
C++
1
2
3
4
5
bool Complex::operator==(const Complex& rhs)
{
    if ((its_real==rhs.its_real) && (its_imag==rhs.its_imag)) return true;
    else return false;
}
Bers
Заблокирован
29.11.2011, 00:03     Оператор равенства #5
вот так наверное попроще будит:

C++
1
2
3
4
bool Complex::operator==(const Complex& rhs)
{
          return  ((its_real==rhs.its_real) && (its_imag==rhs.its_imag)) ;
}
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
29.11.2011, 00:08     Оператор равенства #6
Нельзя перегружать операторы:
C++
1
.
C++
1
.*
C++
1
::
C++
1
?:
Остальные можно. Даже new и delete.
Сыроежка
Заблокирован
29.11.2011, 00:10     Оператор равенства #7
Цитата Сообщение от ramarren14 Посмотреть сообщение
В такой форме?
C++
1
2
3
4
5
bool Complex::operator==(const Complex& rhs)
{
    if ((its_real==rhs.its_real) && (its_imag==rhs.its_imag)) return true;
    else return false;
}
Чтобы ответить на этот вопрос, нужно видеть конструкторы вашего класса, то есть имеют ли они функции преобразования или нет. Если какой-нибудь конструктор представляет из себя функцию преобразования, то лучше этот оператор сделать не членом класса.
Чтобы было понятно, допустим, у вас есть конструктор с одним параметром (например, double), и который не объявлен со спецификатором explicit. Тогда, если оператор объявлен вне класса как функция с двумя параметрами, товы могли бы ее использовать в следующем выражении

C++
1
2
3
4
double x = 0.0;
complex z( 10.0, 20.0 );
 
if ( x == z ) /* Something do */
Когда же вы ообъявляете эту функцию членом класса, то вы не сможете использовать подобное логическое выражение., так как первый объект выражения не имеет тип вашего класса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2011, 00:16     Оператор равенства
Еще ссылки по теме:

Оператор равенства возвращает не то значение C++
C++ Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости

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

Или воспользуйтесь поиском по форуму:
ramarren14
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
29.11.2011, 00:16  [ТС]     Оператор равенства #8
Понятно. Всем спасибо.
Yandex
Объявления
29.11.2011, 00:16     Оператор равенства
Ответ Создать тему
Опции темы

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