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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579
#1

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

09.05.2011, 21:56. Просмотров 1869. Ответов 4
Метки нет (Все метки)

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     Не получается перегрузить оператор сравнения
Посмотрите здесь:

Класс matrix. Не получается перегрузить оператор = - C++
Всем привет! Пишу класс matrix. Не получается перегрузить оператор = Конструктор копирования тоже не получается. Оба выводят одну и ту...

Не получается перегрузить оператор ++ при работе с массивами - C++
Текст: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; class array { public: array(); ...

Не получается перегрузить оператор вывода для дружественной функции - C++
Не могу понять почему пытаясь перегрузить оператор вывода использую дружественную функцию, я не могу передать объект по значению, это...

Перегрузить операторы сравнения и отсортировать - C++
Добрый день. Требуется отсортировать данные из файла формата &quot;тип1 тип2 тип3 тип4&quot; только по &quot;тип1&quot; и &quot;тип2&quot; (в алфавитном порядке)....

Для класса Vector перегрузить операторы присваивания, сравнения, ввода и вывода - C++
срочно помогите написать программу, желательно с комментариями если можно)) Для класса Vector перегрузить операторы присваивания, ...

перегрузить оператор ++ - C++
Всем привет!!!Тут такое дело, когда запускаю программу она запускается, а когда дело доходит до перегрузки она выдает ошибку((: То есть...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
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
106 / 106 / 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
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
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"; 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2011, 22:27     Не получается перегрузить оператор сравнения
Еще ссылки по теме:

Перегрузить оператор - - C++
Есть 2 масива если в них есть 2 одинаковых числа то з первого масива что бы изменялось на ноль например то число которое есть во втором...

Перегрузить оператор - C++
Хай class Stalk { int length; public: Stalk() { //cout &lt;&lt; &quot;Constructor Stack&quot; &lt;&lt; endl; } ...

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

Как перегрузить оператор = - C++
ну там чтоб он например сложение делал или чтото другое

Как перегрузить оператор []? - C++
вообщем есть класс class Point{ private: int color_id, state; public: //constructors Point(); //destructors ...

Ofstream перегрузить оператор << - C++
Здравствуйте, есть такая проблемка: создал клас матриц на основе двумерного вектора, помогите пожалуйста правильно перегрузить оператор...


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

Или воспользуйтесь поиском по форуму:
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579
09.05.2011, 22:27  [ТС]     Не получается перегрузить оператор сравнения #5
Спасибо за разъяснение такое, теперь не забуду
Yandex
Объявления
09.05.2011, 22:27     Не получается перегрузить оператор сравнения
Ответ Создать тему
Опции темы

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