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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 135, средняя оценка - 4.73
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

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

19.02.2010, 07:56. Просмотров 18333. Ответов 13
Метки нет (Все метки)

Никогда потоками не пользовался, поэтому не знаю. Как перегрузить для ввода из потока оператор
C++
1
operator >>
? Как перегрузить для вывода в поток оператор
C++
1
operator >>
? Какие они должны возвращать типы? Как выглядят прототипы? Учесть, что вводу/выводу подлежат закрытые поля объектов класса, для которого требуется перегрузить операторы.

Добавлено через 6 минут
Так:
C++
1
friend istream operator >> (istream &Stream, MyClass &String);
правильно?

Добавлено через 1 минуту
А так:
C++
1
friend ostream operator << (ostream &Stream, MyClass &String);
?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2010, 07:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка ввода/вывода в/из потока (C++):

Перегрузка потока ввода-вывода - C++
Подскажите как правильно перегружать потоки, вот что я делал и какие ошибки появились Как правильно перегружать потоки записи и чтения в...

Перегрузка потока ввода вывода в dll - C++
Доброго времени суток. Мне нужно создать dll, которая содержит экспортируемый класс для работы с рациональными числами. Сам класс...

Перегрузка операторов ввода и вывода из потока в шаблонном классе - C++
Доброго времени суток. Пишу свой вектор. В нём надо перегрузить вышеназванные операторы. Vector.h class Vector { // ... ...

Перегрузка потока ввода - C++
Помогите мне пожалуйста. Пыта #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class rectangle { int *a; ...

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

Перегрузка операции ввода/вывода - C++
В лабораторной говорится: &quot;Перегрузить операции ввода и вывода 2 способами: внутренним и внешним&quot;. Что такое внешним я представляю, а...

13
HIMen
4137 / 1386 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
19.02.2010, 08:02 #2
C++
1
2
3
4
5
6
friend ostream& operator << (ostream &stream, MyClass &obj)
{
    stream << obj.value ...;
    ...
    return stream;
}
2
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.02.2010, 09:52  [ТС] #3
Спасибо. А можно в теле перегруженного оператора ввода, не используя стандартные классы строк, ввести строку одним оператором?
0
HIMen
4137 / 1386 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
19.02.2010, 10:08 #4
Цитата Сообщение от taras atavin Посмотреть сообщение
Спасибо. А можно в теле перегруженного оператора ввода, не используя стандартные классы строк, ввести строку одним оператором?
Не понятно, как это одним параметром
C++
1
2
3
4
5
6
friend istream& operator >> (istream &stream, MyClass &obj)
{
    stream >> obj.value1;
    stream >> obj.value2;   
    return stream;
}
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.02.2010, 10:17  [ТС] #5
Строку, а не поля. А на поля я хочу сам разобрать. Иначе как я введу, например, <12.3+48.6i>?
C++
1
Stream>>Com.re; Stream>>Com.im; Stream c;
? А если с клавы (параметр Stream - это ссылка на cin) поступило <48.6i+12.3>? Менять тело оператора на
C++
1
Stream>>Com.im; Stream c; Stream>>Com.im;
? По какому, интересно, признаку это можно сделать? Ладно, если целиком строку ввести нельзя, то как задать условие для цикла типа
C++
1
2
3
4
5
while (...)
{
 Stream>>c;
 ...
}
(
C++
1
char c;
)?

Добавлено через 1 минуту
Комплекс в данном случае просто пример.
0
HIMen
4137 / 1386 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
19.02.2010, 10:23 #6
Проще всего со строкой, #include <string>
Как вспомню работу с с-строками ...
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.02.2010, 12:06  [ТС] #7
Цитата Сообщение от HIMen Посмотреть сообщение
Как вспомню работу с с-строками
как раз проще, чем гадать: "Под Мелкософтом CString, а под Болэндом TString, или наоборот, как этот класс обозван в gcc, кто его ваще делал и как точно по стандарту выглядит интерфейс доступа к отдельному символу?". Альтернатива - свой класс строк, но я и для него не могу перегрузить ввод из потока.

Добавлено через 1 час 36 минут
Мне только условие завершения, или как ввести сразу c-строку, смотря что проще. А остальное я сам, в обработке таких строк как раз никаких сложностей не вижу.
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
19.02.2010, 17:07 #8
Чтобы не гадать, надо пользоваться <string>, который есть везде, ибо часть стандарта.
0
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
26.02.2010, 20:05 #9
А у меня с перегрузкой операторов ввода/вывода такая проблема

простейший класс

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class myClass
{
public:
    myClass() { itsValue = 0; };
    ~myClass();
 
    int GetValue(){ return itsValue; };
 
    friend ostream& operator<<( ostream&os, const myClass&rhs )
    { return os<<rhs.GetValue(); }
    friend istream& operator>>( istream& is, myClass& rfs )
    { return is >> rfs.GetValue() ; };  
 
private:
    int itsValue;
};
при попытке использовать cout<< либо cin>>в основной программе использующей класс ? компилятор выдает
C++
1
2
3
4
5
6
7
8
9
Compiling...
main.cpp
myClass.cpp
I:\!!WRK\Programming\c++\MyProjects_\Tested\myClass.cpp(26) : error C2662: 'GetValue' : cannot convert 'this' pointer from 'const class myClass' to 'class myClass &'
        Conversion loses qualifiers
I:\!!WRK\Programming\c++\MyProjects_\Tested\myClass.cpp(33) : error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
Error executing cl.exe.
 
Tested.exe - 2 error(s), 0 warning(s)
причем если я переношу itsValue в public, и вместо
C++
1
2
3
4
// ...
{ return os<<rhs.GetValue(); }
// ...
{ return is>>rhs.GetValue(); }
пишу
C++
1
2
3
4
// ...
{ return os<<rhs.itsValue; }
// ...
{ return is>>rhs.itsValue; }
все работает окей. Возникает вопрос, то ли лыжы не едут, то ли я еду по асфальту?
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.02.2010, 06:28  [ТС] #10
Цитата Сообщение от Nick Alte Посмотреть сообщение
Чтобы не гадать, надо пользоваться <string>, который есть везде, ибо часть стандарта.
. Как раз гадание вызывается использованием стандартных строк.

Добавлено через 5 минут
Просто запостите сюда получение числа введённых символов, или определение того, является ли только что прочитанный символ последним. А остальное я сделаю сам. Это в любом случае проще самостоятельного перевода стандарта, даже если бы фирмы и не свои отличия в имя класса строк.
0
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
28.02.2010, 17:09 #11
В итоге сам себе помог, выход был прост, перегрузка функции GetValue()
C++
1
2
int GetValue()const{ return itsValue; };
int& GetValue(){ return itsValue; };
Добавлено через 2 часа 15 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
Так:
Код C++1 friend istream operator >> (istream &Stream, MyClass &String);
правильно?
Добавлено через 1 минуту
А так:
Код C++1 friend ostream operator << (ostream &Stream, MyClass &String);
?
правильно только правильнее так
C++
1
friend ostream operator << (ostream &Stream, const MyClass &String);
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
01.03.2010, 06:10  [ТС] #12
Цитата Сообщение от Amarted Посмотреть сообщение
В итоге сам себе помог, выход был прост, перегрузка функции GetValue()
. Это кому? И о чём? Об определении числа символов?
0
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
05.03.2010, 16:16 #13
это ктому что в посте #9 я задал вопрос а в посте #11 сам себе ответил... вот такая вот помощь товарищи...
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.03.2010, 07:51  [ТС] #14
Цитата Сообщение от taras atavin Посмотреть сообщение
riend ostream operator << (ostream &Stream, MyClass &String);
. Выдаёт какоето предупреждение.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2010, 07:51
Привет! Вот еще темы с ответами:

Перегрузка потокового ввода/вывода - C++
Вот сама перегрузка ostream&amp; operator&lt;&lt; (ostream&amp; out, Poli&amp; outstream) { out&lt;&lt;&quot;Степень полинома=&quot;&lt;&lt;outstream.n&lt;&lt;endl; for(int...

Перегрузка оператора ввода вывода - C++
Есть два хэдера(header.h и Array.h) и исполняемая программа main.cpp в которой я как раз и обращаюсь к оператору ввода Array.h ...

Перегрузка операторов ввода/вывода. - C++
Класс комплексных чисел. Нужно чтобы программа выводила и вводила в таком виде (функции in и out): #include &lt;iostream&gt; #include...

Перегрузка операций ввода/вывода - C++
Доброго времени суток господа и дамы! Нужно решить один нюанс. Никак не получается. Есть код: #include &lt;iostream&gt; #include &lt;stdlib.h&gt;...


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
23.03.2010, 07:51
Ответ Создать тему
Опции темы

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