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

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

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

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

15.06.2016, 17:23. Просмотров 246. Ответов 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++
Перегрузка "opеrator =" и "{ }" для собственного класса C++
Перегрузка операций в классе "рациональная дробь" C++
Перегрузка "operator =" для шаблона класса C++
C++ Определение класса, описывающего комплексное число. Перегрузка для него бинарного оператора "*"
Перегрузка операторов "+" и "-" и бинарных C++
C++ Перегрузка операторов в классе "Последовательность целых чисел"
Перегрузка операторов: Можно ли вынести "тело" оператора (расчеты) из H в CPP? C++
C++ Класс "динамический массив", перегрузка операторов +, =
C++ Лабораторная на тему "Перегрузка операторов"

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.06.2016, 18:30     Перегрузка операторов ==, !=, <, > для класса "Дробь" #2
В конструкторе копирования ошибка.
sergentiy
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 45
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
2323 / 1949 / 192
Регистрация: 03.07.2012
Сообщений: 6,996
Записей в блоге: 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
Сообщений: 45
15.06.2016, 21:49  [ТС]     Перегрузка операторов ==, !=, <, > для класса "Дробь" #5
Вот!!! Ньюанс, однако )) Надо больше писать )) такие вещи нужно научиться видеть самому. Но Вам спа-си-бо!
Yandex
Объявления
15.06.2016, 21:49     Перегрузка операторов ==, !=, <, > для класса "Дробь"
Ответ Создать тему
Опции темы

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