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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверьте правильность нулевого указателя http://www.cyberforum.ru/cpp-beginners/thread647159.html
Задание: Напишите программу с блуждающим указателем. Исправьте программу чтобы блуждающий, стал нулевым. Мое представление о решении задания я написал в комментах, правильное ли оно? #include...
C++ Производительность CPU, КЕШ, многопоточность Доброго времени суток! Суть проблемы - есть курсовой по системному программированию но я не знаю с чего и начать ( Тема: Исследование производительности ЦПУ при изменении размеров рабочих... http://www.cyberforum.ru/cpp-beginners/thread647158.html
C++ Проблемы с удалением связанного списка(С++)
Здравствуйте! Передо мной стоит следующая задача: необходимо создать список, вывести его на экран и удалить. Программу необходимо запускать несколько раз, вот в этом и возник ступор. Дело в том, что...
C++ Логические операторы в выражениях
Здравствуйте, в одном из тестов для новичков наткнулся на вопрос: каков результат работы следующего кода: int d = 5; bool b = true, c; c = ( !b || (d>3) ); Я думал будет ошибка компиляции,...
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 след. образом: (см.картинку). Помогите да пацаны подробнее

Показать сообщение отдельно
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
05.09.2012, 18:02
xexew, При передачи по ссылке не создается копия объекта, а передается существующий. При передачи по значению ( в Вашем случае ), создается копия объекта. Если для встроенных типов это нормально, то есть разницы в производительности не будет, то с пользовательскими типами уже будет накладно, особенно если используется динамическая память.

Ваши файлы должны выглядеть примерно так:
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
#ifndef RATIONAL_H  //используйте стражей включения ( подробно о них можно прочитать на wiki )
#define RATIONAL_H
 
#include <iostream>
 
//using namespace std; - никогда так не делайте в заголовочных файлах
class Rational
{
private:
    int ch,zn;
    void gcd();
public:
    Rational(int);
    Rational(int, int);
    Rational operator+( const Rational & );
    Rational operator-( const Rational & );
    Rational operator*( const Rational & );
    Rational operator/( const Rational & );
    Rational operator-();//unar
    Rational operator+(int);
    friend std::ostream& operator<<( std::ostream& , const Rational & );
    void print();
 
};
 
Rational operator+( int, const Rational & );
 
#endif
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
#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+( const 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-(const 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*(const Rational &r)
{
    Rational c(ch,zn);
    
    c.ch *= r.ch;
    c.zn *= r.zn;
    c.gcd();
    return c;
}
 
Rational Rational::operator/(const 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,const Rational &r)
{
    r.print();
    return c;
}
 
Rational Rational::operator +(int x)
{
    Rational r(ch,zn);
    r.ch += x * r.zn;
    return r;
}
 
const Rational operator+( int x, const Rational &r ) {
    return r + x;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru