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

Перегрузка операторов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверьте правильность нулевого указателя http://www.cyberforum.ru/cpp-beginners/thread647159.html
Задание: Напишите программу с блуждающим указателем. Исправьте программу чтобы блуждающий, стал нулевым. Мое представление о решении задания я написал в комментах, правильное ли оно? #include <iostream> using namespace std; int main () { int *a=new int; *a=1000;
C++ Производительность CPU, КЕШ, многопоточность Доброго времени суток! Суть проблемы - есть курсовой по системному программированию но я не знаю с чего и начать ( Тема: Исследование производительности ЦПУ при изменении размеров рабочих структур данных приложения и объема КЕШ памяти при чтении и записи. Все написанное выше нужно рассматривать в контексте многоядерности и многопоточности. Как понял я, есть несколько потоков они чего-то... http://www.cyberforum.ru/cpp-beginners/thread647158.html
C++ Проблемы с удалением связанного списка(С++)
Здравствуйте! Передо мной стоит следующая задача: необходимо создать список, вывести его на экран и удалить. Программу необходимо запускать несколько раз, вот в этом и возник ступор. Дело в том, что программа создает список, выводит его на экран и удаляет первый раз вроде исправно, но второй раз программа выдает ошибку на выводе списка(как я понял, либо программа не правильно удаляет связанный...
C++ Логические операторы в выражениях
Здравствуйте, в одном из тестов для новичков наткнулся на вопрос: каков результат работы следующего кода: int d = 5; bool b = true, c; c = ( !b || (d>3) ); Я думал будет ошибка компиляции, однако ошибся. Вот как понять третью строку? Ведь в ней говорится - "c равно false или true". Как же компилятор понимает какое значение присваивать переменной с, если у него больше нет никаких условий?...
C++ Определить количество и сумму членов последовательности http://www.cyberforum.ru/cpp-beginners/thread647117.html
Даны натуральное n и целые числа a(1), a(2),...,a(n). Определить количество и сумму членов последовательности a(i), которые делятся на 5 и не делятся на 7. P.S. Необходимо написать без использования массива, помогите, пожалуйста.
C++ Матрицы Заполнить двумерный массив размером 7х7 след. образом: (см.картинку). Помогите да пацаны подробнее

Показать сообщение отдельно
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76

Перегрузка операторов - C++

05.09.2012, 16:51. Просмотров 513. Ответов 5
Метки (Все метки)

Есть у меня свой тип рациональных дробей, и вот мне надо перегрузить оператор "+" таким образом, что бы работала такая строчка кода
C++
1
Rational d = 2 + b;
, для такого случая:
C++
1
Rational c = a + 2;
у меня есть перегрузка оператора, не могли бы вы подсказать, каким образом перегрузить оператор для целого числа?
Вот весь класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Rational.h 
#include <iostream>
 
using namespace std;
class Rational
{
private:
    int ch,zn;
    void gcd();
public:
    Rational(int);
    Rational(int, int);
    Rational operator+(Rational);
    Rational operator-(Rational);
    Rational operator*(Rational);
    Rational operator/(Rational);
    Rational operator-();//unar
    Rational operator+(int);
    friend ostream& operator<<(ostream& , Rational );
    void print();
 
};
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
//Rational.cpp
#include "Rational.h"
#include <iostream>
 
using namespace std;
 
Rational::Rational(int c)
{   
    ch = c; zn = 1;
}
 
Rational::Rational(int c, int z)
{
    if(z < 0)
        ch = -c, zn = -z;
    else
        ch = c, zn = z;
    gcd();
}
 
void Rational::print()
{
    cout << ch << '/' << zn << endl;
}
 
void Rational::gcd()
{
    int b1 = ch, b2 = zn;
    if(b1 < 0)
        b1 = -b1;
    while(b1 != b2)
        if(b1 > b2)
            b1 -= b2;
        else
            b2 -= b1;
    if(b1 != 1)
        ch /= b1,
        zn /= b1;
 
}
 
Rational Rational::operator+(Rational r)
{   
    Rational c(ch, zn);
        
        c.ch *= r.zn;
        r.ch *= c.zn;
        c.zn *= r.zn;
        c.ch += r.ch;//then use gcd() fun
    
    c.gcd();
    return c;
}
 
Rational Rational::operator-(Rational r)
{   
    Rational c(ch, zn);
        
        c.ch *= r.zn;
        r.ch *= c.zn;
        c.zn *= r.zn;
        c.ch -= r.ch;//then use gcd() fun
    
    c.gcd();
    return c;
}
 
Rational Rational::operator*(Rational r)
{
    Rational c(ch,zn);
    
    c.ch *= r.ch;
    c.zn *= r.zn;
    c.gcd();
    return c;
}
 
Rational Rational::operator/(Rational r)
{
    Rational c(ch,zn);
    
    c.ch *= r.zn;
    c.zn *= r.ch;
    c.gcd();
    return c;
}
 
Rational Rational::operator -()
{
    Rational c(-ch, zn);
    return c;
}
 
ostream &operator<<(ostream &c,Rational r)
{
    r.print();
    return c;
}
 
Rational Rational::operator +(int x)
{
    Rational r(ch,zn);
    r.ch += x * r.zn;
    return r;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//main.cpp
#include "Rational.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    Rational a = Rational(5,6);
    Rational b = 3;
    Rational c = a + 2;
    Rational d = 2 + b;
    Rational e = - b - c;
    Rational f = c * 2 * c;
    cout << a << b << c << d << e << f;
    /*Rational a(2,3);
    Rational b(3,4);
    Rational c =  a + b;
    Rational d = a * b * c;
    cout << a << b << c;
    cout << d;*/
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru