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

Не получается перегрузить оператор сравнения - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Veyron
 Аватар для Veyron
104 / 104 / 4
Регистрация: 02.06.2009
Сообщений: 579
09.05.2011, 21:56     Не получается перегрузить оператор сравнения #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class vremya
{
    private:
        int h,m,s;
    public:
    void operator ++(int)
    {
        s++;
        if (s==60)
        {
            s=0; m++;
        }
        if (m==60)
        {
            m=0;h++;
        }
        if (h==24)
            h=0;
    }
    vremya(int hour, int minute, int second)
    {
        h=hour,m=minute,s=second;
    }
    bool operator ==(vremya& a, vremya& b) const
    {
        return (a.h==b.h && a.m==b.m && a.s==b.s);
    }
    friend std::ostream& operator << (std::ostream& o, vremya& t)
    {
        return o << t.h << ':' << t.m << ':' << t.s << endl;
    }
};
компилятор выдает ошибку:
Bash
1
/home/eugene/CodeBlocks/ceq/main.cpp|35|error: ‘bool vremya::operator!=(vremya&, vremya&) const’ must take exactly one argument|
Как правильно перегрузить оператор?

Добавлено через 9 минут
Решено. Правильно надо перегрузить так:
C++
1
2
3
4
    bool operator ==(vremya& a) const
    {
        return (a.h==h && a.m==m && a.s==s);
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 21:56     Не получается перегрузить оператор сравнения
Посмотрите здесь:

C++ Не получается перегрузить оператор ++ при работе с массивами
Как перегрузить оператор = C++
перегрузить оператор ++ C++
C++ Перегрузить оператор
C++ Класс matrix. Не получается перегрузить оператор =
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
09.05.2011, 21:56     Не получается перегрузить оператор сравнения #2
C++
1
2
3
4
bool operator ==(const vremya& b) const
{
    return (h==b.h && m==b.m && s==b.s);
}
Veyron
 Аватар для Veyron
104 / 104 / 4
Регистрация: 02.06.2009
Сообщений: 579
09.05.2011, 21:56  [ТС]     Не получается перегрузить оператор сравнения #3
Решено. Правильно надо перегрузить так:
C++
1
2
3
4
    bool operator ==(vremya& a) const
    {
        return (a.h==h && a.m==m && a.s==s);
    }
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
09.05.2011, 22:13     Не получается перегрузить оператор сравнения #4
Все бинарные операторы(члены класса) всегда принимают ровно один аргумент. Чтобы понять почему, достаточно записать любой оператор в его функциональной форме, например:
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    vremya a(1,2,3);
    vremya b(1,2,3);
 
    // стандартная запись
    if(a == b) std::cout << "a = b\n"; 
 
    // тоже самое, но в функциональном виде
    if(a.operator==(b)) std::cout << "a = b\n"; 
}
Veyron
 Аватар для Veyron
104 / 104 / 4
Регистрация: 02.06.2009
Сообщений: 579
09.05.2011, 22:27  [ТС]     Не получается перегрузить оператор сравнения #5
Спасибо за разъяснение такое, теперь не забуду
Yandex
Объявления
09.05.2011, 22:27     Не получается перегрузить оператор сравнения
Ответ Создать тему
Опции темы

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