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

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

Войти
Регистрация
Восстановить пароль
 
sergentiy
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 43
#1

Перегрузка операторов ==, !=, <, > для класса "Дробь" - C++

15.06.2016, 17:23. Просмотров 192. Ответов 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
class Drib
{
private:
    int chus;
    int znam;
 
public:
    Drib()
    {
        chus = 1;
        znam = 1;
    }
 
    Drib(int chus)
    {
        this->chus = chus;
        znam = 1;
    }
 
    Drib(int chus, int znam)
    {
        this->chus = chus;
        if (znam != 0)
            this->znam = znam;
        else
        {
            cout << "Znam ne mojet = 0" << endl;
        }
    }
 
    Drib(const Drib & obj)
    {
        chus = this->chus;
        chus = this->znam;
    }
 
    int GetChus()
    {
        return chus;
    }
 
    void SetChus(int chus)
    {
        this->chus = chus;
    }
 
    int GetZnam()
    {
        return znam;
    }
 
    void SetZnam(int zman)
    {
        if (znam != 0)
            this->znam = znam;
        else
        {
            cout << "Znam ne mojet = 0" << endl;
        }
    }
 
    void Show()
    {
        cout << " " << chus << "/" << znam << " ";
    }
 
    
 
    bool operator<(Drib& z)
    {
        if ((double)(this->chus / this->znam)<(double)(z.chus / z.znam))
            return true;
        else
            return false;
    }
 
    bool operator>(Drib& z)
    {
        return ((double)(this->chus / this->znam)>(double)(z.chus / z.znam)) ? true : false;
    }
 
    bool operator == (Drib& z)
    {
        return ((double)(this->chus / this->znam) == (double)(z.chus / z.znam)) ? true : false;
    }
 
    bool operator !=(Drib& z)
    {
        return ((double)(this->chus / this->znam) != (double)(z.chus / z.znam)) ? true : false;
    }
 
};
 
int main()
{
 
    Drib y(2, 5);
    Drib z(3, 5);
 
    if (y == z)
    {
        y.Show();
        cout << "==";
        z.Show();
    }
 
    if (y != z)
    {
        y.Show();
        cout << "!=";
        z.Show();
    }
 
    if (y>z)
    {
        y.Show();
        cout << ">";
        z.Show();
    }
 
    if (y<z)
    {
        y.Show();
        cout << "<";
        z.Show();
    }
 
 
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2016, 17:23     Перегрузка операторов ==, !=, <, > для класса "Дробь"
Посмотрите здесь:

Класс "Матрица": конструктор, деструктор и перегрузка операторов C++
C++ Определение класса, описывающего комплексное число. Перегрузка для него бинарного оператора "*"
C++ Перегрузка операторов в классе "Последовательность целых чисел"
Перегрузка операторов для класса "множество целых чисел" C++
Перегрузка "operator =" для шаблона класса C++
Перегрузка "opеrator =" и "{ }" для собственного класса C++
C++ Класс "Дроби" и перегрузка операторов для этого класса
Перегрузка операторов для класса "Матрица" C++
Перегрузка операторов "+" и "-" и бинарных C++
C++ Класс "Дробь". Перегрузка оператора "=="
Перегрузка операций в классе "рациональная дробь" C++
C++ Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4873 / 3012 / 370
Регистрация: 10.11.2010
Сообщений: 11,061
Записей в блоге: 10
Завершенные тесты: 1
15.06.2016, 18:30     Перегрузка операторов ==, !=, <, > для класса "Дробь" #2
В конструкторе копирования ошибка.
sergentiy
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 43
15.06.2016, 21:36  [ТС]     Перегрузка операторов ==, !=, <, > для класса "Дробь" #3
Да, ошибку исправил, кроме того у меня в сеттере была ошибка (правда я его не использовал) но код работает не правильно. Причем когда я прохожусь дебагером, то значения везде правильные, а условие срабатывает == вместо != и <

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
class Drib
{
private:
    int chus;
    int znam;
 
public:
    Drib()
    {
        chus = 1;
        znam = 1;
    }
 
    Drib(int chus)
    {
        this->chus = chus;
        znam = 1;
    }
 
    Drib(int chus, int znam)
    {
        this->chus = chus;
        if (znam != 0)
            this->znam = znam;
        else
        {
            cout << "Znam ne mojet = 0" << endl;
        }
    }
 
    Drib(const Drib & obj)
    {
        chus = this->chus;
        [B]znam[/B]= this->znam;
    }
 
    int GetChus()
    {
        return chus;
    }
 
    void SetChus(int chus)
    {
        this->chus = chus;
    }
 
    int GetZnam()
    {
        return znam;
    }
 
    void SetZnam(int [B]znam[/B])
    {
        if (znam != 0)
            this->znam = znam;
        else
        {
            cout << "Znam ne mojet = 0" << endl;
        }
    }
 
    void Show()
    {
        cout << " " << chus << "/" << znam << " ";
    }
 
    
 
    bool operator<(Drib& z)
    {
        if ((double)(this->chus / this->znam)<(double)(z.chus / z.znam))
            return true;
        else
            return false;
    }
 
    bool operator>(Drib& z)
    {
        return ((double)(this->chus / this->znam)>(double)(z.chus / z.znam)) ? true : false;
    }
 
    bool operator == (Drib& z)
    {
        return ((double)(this->chus / this->znam) == (double)(z.chus / z.znam)) ? true : false;
    }
 
    bool operator !=(Drib& z)
    {
        return ((double)(this->chus / this->znam) != (double)(z.chus / z.znam)) ? true : false;
    }
 
};
 
int main()
{
 
    Drib y(2, 5);
    Drib z(3, 5);
 
    if (y == z)
    {
        y.Show();
        cout << "==";
        z.Show();
    }
 
    if (y != z)
    {
        y.Show();
        cout << "!=";
        z.Show();
    }
 
    if (y>z)
    {
        y.Show();
        cout << ">";
        z.Show();
    }
 
    if (y<z)
    {
        y.Show();
        cout << "<";
        z.Show();
    }
 
 
    return 0;
}
Добавлено через 16 минут
я уже даже вот так написал

C++
1
2
3
4
5
6
7
bool operator == (Drib& z)
    {
        double a = 0, b = 0;
        a = (double)(this->chus / this->znam);
        b = (double)(z.chus / z.znam);
        return (a == b) ? true : false;  // здесь значение a и b почему то остается 0, и поэтому срабатывает true, такое впечетление что операция / не срабатывает
    }
zer0mail
Заблокирован
15.06.2016, 21:49     Перегрузка операторов ==, !=, <, > для класса "Дробь" #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от sergentiy Посмотреть сообщение
Drib(const Drib & obj)
* * {
* * * * chus = this->chus;
* * * * znam= this->znam;
* * }
А где же obj?

Добавлено через 6 минут
Кроме того, (double)(1/2) =0, т.к. сначала делается целое деление, а потом частное (0) приводится к double.

Добавлено через 5 минут
Вместо (double)(a/b) напиши 1.*a/b
sergentiy
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 43
15.06.2016, 21:49  [ТС]     Перегрузка операторов ==, !=, <, > для класса "Дробь" #5
Вот!!! Ньюанс, однако )) Надо больше писать )) такие вещи нужно научиться видеть самому. Но Вам спа-си-бо!
Yandex
Объявления
15.06.2016, 21:49     Перегрузка операторов ==, !=, <, > для класса "Дробь"
Ответ Создать тему
Опции темы

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