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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
ramarren14
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
#1

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

28.11.2011, 23:53. Просмотров 1254. Ответов 7
Метки нет (Все метки)

Я правильно понимаю что оператор равенства (==) нельзя перегрузить?
То есть если я напишу функцию:
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++
В классе Data есть оператор bool operator == (Data * el) { return (name == el-&gt;name); }; конструктор Data(string n, string a = &quot;&quot;,...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * - C++
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор копирования, бинарный оператор суммы «*»,...

Определение равенства значений в векторе - C++
Всем привет, не нашел похожего на форуме, потому решил задать вопрос. Дело пустяковое но ступорит, я думаю скорей причина в...

Проверка равенства символов. Оптимизировать код - C++
Добрый день, есть задача, я срузу напишу что надо сделать: во входном файле в первой строке дано число n - где 1 &gt;= n &lt;= 1000, а в...

Не выполняется условие равенства переменной методу класса - C++
не выполняется условие (строка 136) (проблема не с WinApi) #include&lt;ctime&gt; #include&lt;Windows.h&gt; LRESULT CALLBACK WndProc(HWND,...

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

Вычисление равенства суммы цифр заданного числа! - C++
Вот задача: Переменной Т присвоить true если сумма единичных и десятичных цифр равна сумме сотенных и тысячных цифр. Это прога...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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,133
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     Оператор равенства
Еще ссылки по теме:

Численно убедиться в справедливости равенства с заданной погрешностью E - C++
Численно убедиться в справедливости равенства с заданной погрешностью E. Почему программа зацикливается? З.Ы. прогу надо написать на Турбо...

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

C клавиатуры вводятся два вещественных числа. Вывести результат их произведения в виде равенства. Например, для введенных чисел 5 и 7 вывести 5*7=35 - C++
Пожалуйста помогите!

оператор new - C++
Есть массив: static int *p=new int ; // call-счётчик вызовов требуется каждый раз выделять память и при этом сохранять все данные...

Оператор -> C++ - C++
В статье о С++11 наткнулся на следующий код template &lt;typename T1, typename T2&gt; auto add(T1 t1, T2 t2) -&gt; decltype(t1 + t2) { ...


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

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

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