Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Kristina_S
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 182
#1

Перегрузка операций в классе "рациональная дробь" - C++

03.09.2016, 17:48. Просмотров 448. Ответов 16
Метки нет (Все метки)

Есть класс "рациональная дробь" с двумя закрытыми полями - числитель и знаменатель.
Нужно перегрузить оператор сложения,таким образом чтобы работало int+T,где T-это тип,причем сделать ее глобальной
Именно переменная "d" и не работает. Подскажите,что делать.к сожалению совсем нет идей.
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
 void main()
{
    Rational a=Rational(5,6);
    Rational b(3);
    Rational c = a + 2;
    Rational d = 2 + b;
    a.print();
    b.print();
    c.print();
    system("pause");
}
}
class Rational
{
private:
    int numerator;
    int denomiator;
public:
    Rational();
    Rational(int);
    Rational(int,int);
    int get_numerator();
    int get_denominator();
    void reduction();
    Rational operator+(int);
    void print();
 
 
};
int gcd(int a, int b)
{
    while (b)
    {
        a %= b;
        swap(a, b);
    }
    return a;
}
int Rational::get_numerator()
{
    return numerator;
}
int Rational::get_denominator()
{
    return denomiator;
}
Rational operator+(int a, Rational b)
{
    
}
Rational::Rational()
{
    numerator = 1;
    denomiator = 1;
}
 
Rational::Rational(int a)
{
    numerator = a;
    denomiator = 1;
}
 
Rational::Rational(int a, int b)
{
    numerator = a;
    denomiator = b;
}
 
void Rational::print()
{
    denomiator == 1 ? cout << numerator << endl : cout << numerator << '/' << denomiator << endl;
}
 
void Rational::reduction()
{
    int a=gcd(numerator, denomiator);
    if (a != 1)
    {
        numerator /= a;
        denomiator /= a;
    }
}
 
Rational Rational::operator+ (int a)
{
    Rational res;
    res.numerator = a*this->denomiator;
    res.denomiator = this->denomiator;
    res.reduction();
    return res;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2016, 17:48
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перегрузка операций в классе "рациональная дробь" (C++):

Ввести класс для работы с объектом "рациональная дробь" - C++
Ввести класс для работы с объектом &quot;рациональная дробь&quot;.Реализовать: а)сложение(вычитание) двух дробей; б)приведение дроби к...

Класс для работы с объектом "рациональная дробь" - C++
Надо ввести класс для работы с объектом &quot;рац.дробь&quot; и реализовать 1)умножение(деление) двух дробей 2)сравнение двух дробей.Сравнение двух...

Класс "Рациональная дробь" - C++
Реализовать класс Rational, используя два массива из 100 элементов типа unsigned char для представления числителя и знаменателя. Каждый...

Класс "Дробь". Перегрузка оператора "==" - C++
template &lt;class T&gt; void polynomial&lt;T&gt;::refresh(){ //отбрасывающую старшие члены полинома с нулевыми коэффициентами int counter = 0;...

Перегрузка операторов ==, !=, <, > для класса "Дробь" - C++
Не могу найти ошибку, почему то числитель второй дроби увеличивается... Думал может что-то с конструкторами, но вроди все ок... Алгоритмы...

Перегрузка операторов в классе "Последовательность целых чисел" - C++
Добрый день! Столкнулся с таким заданием: &quot;Создать класс «последовательность целых чисел». Элементы последовательности хранить в...

16
Peoples
1246 / 751 / 464
Регистрация: 06.02.2016
Сообщений: 2,036
Записей в блоге: 14
Завершенные тесты: 4
03.09.2016, 18:27 #16
Kristina_S, И у вас там считаем не правильно немного
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Rational operator+ (int x, const Rational& y) {
 
 Rational res;
    res.numerator =y.numerator+x*y.denomiator;
    res.denomiator =y.denomiator;
    res.reduction();
    return res;
}
Rational operator+ (const Rational& y, int x) {
 
 Rational res;
    res.numerator =y.numerator+x*y.denomiator;
    res.denomiator =y.denomiator;
    res.reduction();
    return res;
}
0
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
04.09.2016, 04:26 #17
Бог знает, чего понаписали! Вот так нужно:
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
#include <algorithm>
#include <iostream>
///////////////////////////////////////////////////////////////////////////////
int gcd(int a, int b)
{
   while(b)
   {
       a %= b;
       std::swap(a, b);
   }
   return a;
}
///////////////////////////////////////////////////////////////////////////////
class Rational
{
    //-------------------------------------------------------------------------
    int     numerator_;
    int     denominator_;
   //-------------------------------------------------------------------------
public:
    //-------------------------------------------------------------------------
    Rational
        (
            int     numerator   =   0,
            int     denomiator  =   1
        )
        :
        numerator_      ( numerator     ),
        denominator_    ( denomiator    )
    {
        reduction();
    }
    //-------------------------------------------------------------------------
    int     get_numerator()                                                 const
    {
        return numerator_;
    }
    //-------------------------------------------------------------------------
    int     get_denominator()                                               const
    {
        return denominator_;
    }
    //-------------------------------------------------------------------------
    Rational    &   operator+=  ( Rational   const   &   r )
    {
        numerator_      *=  r.denominator_;
        numerator_      +=  r.numerator_    *   denominator_;
        denominator_    *=  r.denominator_;
        reduction();
        return  *this;
    }
    //-------------------------------------------------------------------------
    void    print()                                                         const
    {
        std::cout    <<  numerator_;
 
        if( denominator_    !=  1 )
        {
            std::cout   << '/' << denominator_;
        }
 
        std::cout   <<  std::endl;
    }
    //-------------------------------------------------------------------------
private:
    //-------------------------------------------------------------------------
    void    reduction()
    {
        int     a   =   gcd(numerator_, denominator_);
        numerator_      /=  a;
        denominator_    /=  a;
    }
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////
Rational operator+
    (
        Rational    a,
        Rational    b
    )
{
    return  a   +=  b;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
   Rational     a   =   Rational(50, 60);
   Rational     b(3);
   Rational     c   =   a   +   2;
   Rational     d   =   2   +   b;
   a.print();
   b.print();
   c.print();
   d.print();
   system("pause");
}
0
04.09.2016, 04:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2016, 04:26
Привет! Вот еще темы с ответами:

Перегрузка операций методами класса "Круг" - C++
Класс – круг на плоскости: Переопределить методами класса операции:  Объект1=Объект2  Объект+=вещественное число ...

Класс "Массив". Перегрузка стандартных операций - C++
Дан класс (возможное имя класса Massiv), задающий массив целых чисел. Поля класса: указатель на массив (тип int *), число элементов массива...

"динамическая строка" и перегрузка операций (класс) - C++
Добрый день! Прошу помочь написать,подсказать,что исправить в программе по заданию: Пользовательский класс String должен содержать...

Перегрузка оператора вывода в классе "Время" - C++
Здравствуйте. Столкнулся с проблемой при работе с классом (Время), что выводит или чушь или вообще ничего не выводит. Прописал (вроде бы) 1...


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

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

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