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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Дан список из сведений о багаже 10 пассажиров. http://www.cyberforum.ru/cpp-beginners/thread259550.html
Подскажите пожалуйста как написать функцию ( if ) в данном примере: вот задание: Дан список из сведений о багаже 10 пассажиров. Найти багаж, средний вес одной вещи, в котором отличается не более, чем на 0,3 кг от общего среднего веса одной вещи по всему списку. #include <iostream> using namespace std;
C++ За две недели надо написать программу с полным ее описанием по С++ необходимо создать базу данных.с чего бы начать? http://www.cyberforum.ru/cpp-beginners/thread259547.html
C++ Вопрос по указателям
Ребят, простите за такую глупость, но вот не знаю как ответить на чётко поставленный преподавателем вопрос : "Как зная указатель на функцию, получить значение этой функции в точке ?"
C++ Функции на С
Дано действительное число y. Получить
C++ Выражения и файлы http://www.cyberforum.ru/cpp-beginners/thread259487.html
В текстовом файле находится выражение, состоящее из чисел и знаков арифметических операций. Программа вычисляет это выражение, учитывая приоритет операций и скобки. Использовать алгоритм Бауэра и Замельзона. Как использовать этот алгоритм, срочно надо, а нифига не правильного не пишется(((
C++ Стек В общем это не задача, а так, чисто для себя. В общем, нужно с помощью стека получить слово-перевёртыш. Само слово я могу получить, но как его потом в массив записать. Подскажите пожалуйста. #include "stdafx.h" #include <iostream> #include <conio.h> #include "stack.h" using namespace std; int _tmain(int argc, _TCHAR* argv) { int i,n; подробнее

Показать сообщение отдельно
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
18.03.2011, 09:39     Перегрузка оператора вывода в поток
Собственно есть программка (большинство функций выкинул чтобы не запутывали) по работе с дробными числами
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
# include <iostream>
# include <iomanip>
using namespace std;
 
class RationalNumber
{
friend ostream &operator<<(ostream &output, const RationalNumber &abc);
public:
    // констркутор по умолчанию, проверяет что дробная часть >0
    // +проверяет можно ли сократить дробь
    RationalNumber(int a=1, int b=1)
    {
        nominator=(a>0) ? a:1;
        denominator=(b>0)? b:1;
        for (int i=2;i<=nominator;i++)
         if (denominator%i==0 && nominator%i==0 )
         {
             nominator/=i;
             denominator/=i;
         }
 
    }
 
    // возможность сложения двух объектов класса RationalNumber
    RationalNumber operator+(RationalNumber &right)
    {
        if (denominator==right.denominator) //если знаменатели равны
         return RationalNumber(nominator+right.nominator,denominator);
        int temp; //иначе
        temp=denominator*right.denominator; // определяем новый знаменатель
        return RationalNumber(((temp/denominator*nominator)+(temp/right.denominator*right.nominator))
        ,temp);
    }
 
 
private:
    int nominator; // числитель
    int denominator; // знаменатель
};
 
ostream &operator<<(ostream &output, const RationalNumber &abc)
{
    output<<abc.nominator;
        if (abc.denominator>1) //если знаменатель не =1 (число не целое)
     output<<"/"<<abc.denominator<<endl;
     return output;
}
 
 
int main()
{
    RationalNumber a(17,10);
    RationalNumber b(20,10);
    RationalNumber c;
    cout<<"A: "<<a;
    cout<<"B: "<<b<<endl;
    cout<<(c=a+b); // МОЖНО в любом случае
    cout<<(a+b); // НЕЛЬЗЯ если объект в функции вывода не const или же если не передаёться копия объекта
}
Программа работает, но мне стало интересно почему если в перегрузке оператора вывода написать
C++
1
ostream &operator<<(ostream &output, RationalNumber &abc)
вместо
C++
1
ostream &operator<<(ostream &output, const RationalNumber &abc)
то в main уже будет невозможно вывести в поток (a+b), хотя присвоить c и вывести всё равно можно (c=a+b) ? Ведь я ставлю const только для передаваемого функции объекта и это не влияет же никак на возвращаемый результат.
Также можно делать копию объекта при передаче и тогда программа тоже будет компилироваться
C++
1
ostream &operator<<(ostream &output, RationalNumber abc)
Но мне всё же интересен первый случай, когда мы программе передаём сам объект без const и почему именно так тогда нельзя выводить в поток (a+b) например.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru