74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
1

Перегрузка операции ввода/вывода

28.02.2013, 21:35. Показов 2086. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В лабораторной говорится: "Перегрузить операции ввода и вывода 2 способами: внутренним и внешним". Что такое внешним я представляю, а внутренний - это как?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2013, 21:35
Ответы с готовыми решениями:

Перегрузка операции ввода и вывода. Выдает ошибку
Совместил сразу перегрузку двух операций, выдало дофига ошибок. В чем проблема, помогите...

Перегрузка операции вывода
Помогите пожалуйста. Проблема в том, что компилятору не нравятся поля. Текст перегрузки: ostream...

Перегрузка операции вывода в поток
// stonewt.h #pragma once #ifndef STONEWT_H_ #define STONEWT_H_ class Stonewt { public:...

Перегрузка операции вывода в поток
Есть у меня класс CPoint, в котором я описал перегрузку операции вывода в поток friend...

18
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
28.02.2013, 21:39 2
Внутренний - это как член класса.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.02.2013, 21:50  [ТС] 3
ITcrusader, не могли бы пример?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2013, 22:09 4
Перегрузка оператора
Там, в первом посте, + перегружается в классе.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.02.2013, 22:50  [ТС] 5
alsav22, то перегрузка +. Это элементарно. А вот как перегрузить ввод/вывод внутри?

Добавлено через 7 минут
Загвоздка именно со словом "внутри". Это тогда уже не будет cout << obj; А как?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2013, 22:58 6
Цитата Сообщение от Kgfq Посмотреть сообщение
А вот как перегрузить ввод/вывод внутри?
Также.
Цитата Сообщение от Kgfq Посмотреть сообщение
Загвоздка именно со словом "внутри".
Внутри, я так понимаю, - значит в классе.

Добавлено через 2 минуты
И поподробней, как вопрос формулируется в лаб-ой. Перегрузить для кого-чего сказано?
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.02.2013, 23:01  [ТС] 7
alsav22, цитирую:

"
Вид перегрузки операций ввода и вывода
Внешняя
Внутренняя
"

Если перегрузить << скажем внутри класса, то написать cout << obj не получится. Хотя бы потому, что cout не умеет его принимать
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2013, 23:10 8
Цитата Сообщение от Kgfq Посмотреть сообщение
Хотя бы потому, что cout не умеет его принимать
Для того и пишется перегрузка, чтобы умел.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.02.2013, 23:12  [ТС] 9
alsav22, так тогда нужно перегружать вне, а не внутри
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2013, 23:24 10
Это как метод класса(внутри):
C++
1
2
3
4
5
ostream& operator<<(ostream& out)
{
     out << *this;
     return out;
}
Это как дружественная функция(снаружи, для объектов класса A):
C++
1
2
3
4
5
friend ostream& operator<<(ostream& out, const A& obj)
{
    out << obj;
    return out;
}
Добавлено через 5 минут
Цитата Сообщение от Kgfq Посмотреть сообщение
alsav22, так тогда нужно перегружать вне, а не внутри
Чтобы так писать: cout << obj;, то вне. Если внутри, то писать нужно так: obj << cout; Непривычно, но работать будет правильно. Чтобы было привычно, перегрузку делают в виде дружественной фнкции.

Добавлено через 3 минуты
Цитата Сообщение от Kgfq Посмотреть сообщение
alsav22, цитирую:
"
Вид перегрузки операций ввода и вывода
Внешняя
Внутренняя
"
Я спросил: для кого-чего перегрузка написано? Для класса?
0
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
28.02.2013, 23:28 11
Если я не ошибаюсь, то перегружений оператор ввода/вывода не может быть членом класса!
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.02.2013, 23:31  [ТС] 12
Цитата Сообщение от alsav22 Посмотреть сообщение
Я спросил: для кого-чего перегрузка написано? Для класса?
Походу, да

obj << cout - до этого я довел, но уж больно непривычно
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2013, 23:31 13
Ошибаетесь, очень даже может. 10 пост, первый код. Только синтаксис при использовании будет непривычным. obj << cout;
0
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
28.02.2013, 23:34 14
Тогда почему не хочет компилировать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
using namespace std;
class A
{
    ostream& operator<<(ostream& out)
{
     out << *this;
     return out;
}
};
 
int main()
{}
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2013, 23:46 15
Что пишет?
1
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
28.02.2013, 23:47 16
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
------ Построение начато: проект: Array, Конфигурация: Debug Win32 ------
  main.cpp
d:\динамічний_масив\динамічний_масив\main.cpp(8): error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "A" (или приемлемое преобразование отсутствует)
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(679): может быть "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(726): или       "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(764): или       "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(811): или       "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(937): или       "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(944): или       "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(951): или       "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(958): или       "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(968): или       "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>,A>(std::basic_ostream<_Elem,_Traits> &&,_Ty)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>,
              _Ty=A
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(1085): или       "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const std::error_code &)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(186): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(192): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(199): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(206): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(226): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(260): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(280): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(int)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(305): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned int)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(325): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(345): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned long)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(366): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(386): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(407): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(427): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(447): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(467): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\ostream(487): или       "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)"
          with
          [
              _Elem=char,
              _Traits=std::char_traits<char>
          ]
          при попытке сопоставить список аргументов "(std::ostream, A)"
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2013, 23:52 17
Как используете << с объектом класса покажите. Выше написано как нужно: obj << cout, а вы наверное пишите: cout << obj;

Добавлено через 1 минуту
B перегрузку в public раздел поместите.
1
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
28.02.2013, 23:55 18
О теперь все нормально! Даже не думал что так можно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
class A
{
public:
    int a;
    A(){a=2;}
    ostream& operator<<(ostream& out)
{
     out << a;
     return out;
}
};
 
int main()
{
    A a;
    a<<cout;
    system("pause");
}
2
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.03.2013, 00:31 19
Вы правильно меня исправили. В 10 посте я неверно написал. Нужно так: если в классе A есть поле x, то
C++
1
2
3
4
5
6
7
8
9
10
11
ostream& operator<<(ostream& out)
{
   out << x;
   return out;
}
 
friend ostream& operator<<(ostream& out, const A& obj)
{
    out << obj.x;
    return out;
}
1
01.03.2013, 00:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2013, 00:31
Помогаю со студенческими работами здесь

Перегрузка вывода и ввода
Здравствуйте прошу помочь ,написал программу в ней нужно перегрузить вывод и ввод ,как это можно...

Перегрузка ввода и вывода
Ребят столкнулся с такой проблемой что не работает перегрузка и я не могу понять в чём ошибка вроде...

Перегрузка ввода и вывода
Помогите пожалуйста перегрузить операцию ввода для шаблонного чтобы заполнить массив или подскажите...

Перегрузка потокового ввода-вывода
Доброго времени суток!!! Возникла такая проблема: необходимо сделать перегрузку операций &lt;&lt; и &gt;&gt;....

Перегрузка операторов ввода-вывода
Доброго времени суток! Почему перестал работать &gt;&gt; оператор для стандартного типа char....

Перегрузка потокового ввода/вывода
Вот сама перегрузка ostream&amp; operator&lt;&lt; (ostream&amp; out, Poli&amp; outstream) { out&lt;&lt;&quot;Степень...


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

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

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