0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 47
1

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

15.06.2016, 17:23. Показов 4157. Ответов 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;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2016, 17:23
Ответы с готовыми решениями:

Класс "Дроби" и перегрузка операторов для этого класса
Всем Доброго времени суток. Есть учебная задача по условиям которой необходимо реализовать класс...

Перегрузка операторов для класса "множество целых чисел"
Собственно, в этом и вопрос. Как перегрузить операторы &quot;+&quot; и &quot;-&quot; для объединение и разности двух...

Перегрузка операторов (==, <<, >>, +) для класса "Денежная сумма"
Реализовать класс «Денежная сумма». Данные класса: размер суммы, код валюты, курс по отношению к...

Перегрузка операторов для класса "Цилиндр"
Мне нужно перегрузить вот эти операторы: =, +=, -=, &gt;=, &lt;=. Реализацию их для кода всеровно какую....

4
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
15.06.2016, 18:30 2
В конструкторе копирования ошибка.
0
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 47
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, такое впечетление что операция / не срабатывает
    }
0
2641 / 2218 / 238
Регистрация: 03.07.2012
Сообщений: 8,047
Записей в блоге: 1
15.06.2016, 21:49 4
Лучший ответ Сообщение было отмечено sergentiy как решение

Решение

Цитата Сообщение от 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
0
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 47
15.06.2016, 21:49  [ТС] 5
Вот!!! Ньюанс, однако )) Надо больше писать )) такие вещи нужно научиться видеть самому. Но Вам спа-си-бо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2016, 21:49
Помогаю со студенческими работами здесь

Перегрузка операторов для класса "Матрица"
Доброго времени суток. Помогите довести до ума код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...

Реализовать перегрузку операторов сравнения для пользовательского типа "Обыкновенная дробь"
Структура. дробное сравнение 1. Создайте структуру дробей, состоящую из двух полей int-type ...

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в...

Перегрузка "opеrator =" и "{ }" для собственного класса
Я пытаюсь создать класс Vector. Для задания элементов вектора хотелось бы использовать &quot;opеrator =&quot;...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru