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

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

Восстановить пароль Регистрация
 
sergentiy
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 39
15.06.2016, 17:23     Перегрузка операторов ==, !=, <, > для класса "Дробь" #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
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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
15.06.2016, 18:30     Перегрузка операторов ==, !=, <, > для класса "Дробь" #2
В конструкторе копирования ошибка.
sergentiy
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 39
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
2188 / 1871 / 187
Регистрация: 03.07.2012
Сообщений: 6,661
Записей в блоге: 1
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
Сообщений: 39
15.06.2016, 21:49  [ТС]     Перегрузка операторов ==, !=, <, > для класса "Дробь" #5
Вот!!! Ньюанс, однако )) Надо больше писать )) такие вещи нужно научиться видеть самому. Но Вам спа-си-бо!
Yandex
Объявления
15.06.2016, 21:49     Перегрузка операторов ==, !=, <, > для класса "Дробь"
Ответ Создать тему
Опции темы

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