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

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

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

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

28.11.2011, 23:53. Просмотров 1320. Ответов 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) компилятор заругается?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2011, 23:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оператор равенства (C++):

Оператор равенства возвращает не то значение - C++
В классе Data есть оператор bool operator == (Data * el) { return (name == el-&gt;name); }; конструктор Data(string n, string a = &quot;&quot;,...

Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 - C++
В С++ я ноль, помогите пожалуйста написать прогу Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 ...

Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки - C++
Здравствуйте. В С++ я абсолютный новичок, поэтому с первым же заданием возникли определённые трудности. Будьте добры, помогите решить. Буду...

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

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

Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости - C++
для чего нужен оператор двоеточие ( : ), если два двоеточия( :: ) - это оператор расширения области видимости.

7
Bers
Заблокирован
28.11.2011, 23:56 #2
Цитата Сообщение от ramarren14 Посмотреть сообщение
Я правильно понимаю что оператор равенства (==) нельзя перегрузить?
Не правильно. Оператор== перегружается точно так же, как и любые другие операторы
0
Сыроежка
Заблокирован
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 ==. Поэтому эти две функции никак между собой не конфликтуют.
0
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;
}
0
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)) ;
}
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
29.11.2011, 00:08 #6
Нельзя перегружать операторы:
C++
1
.
C++
1
.*
C++
1
::
C++
1
?:
Остальные можно. Даже new и delete.
0
Сыроежка
Заблокирован
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 */
Когда же вы ообъявляете эту функцию членом класса, то вы не сможете использовать подобное логическое выражение., так как первый объект выражения не имеет тип вашего класса.
0
ramarren14
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
29.11.2011, 00:16  [ТС] #8
Понятно. Всем спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2011, 00:16
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
29.11.2011, 00:16
Ответ Создать тему
Опции темы

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