Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2009, 22:58   #11
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

pu4koff, я не копировал код, просто для себя хочу понять.

я хотел для cout перегрузить, ну тоесть вводишь
for(int i=0;i<n;i++){
cout<<mas[i]<<ler[i];
}

а выводит только то где ler[i] ==10;

Последний раз редактировалось z3rg; 19.03.2009 в 23:00.
z3rg вне форума Ответить с цитированием
Старый 19.03.2009, 23:11   #12
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от z3rg Посмотреть сообщение
pu4koff, я не копировал код, просто для себя хочу понять.
откуда тогда в вашем классе взялось?
ostream& operator<<(ostream& s, const MY_TYPE& t)
{
s << t.a << endl << t.b;
return s;
}

Цитата:
Сообщение от z3rg Посмотреть сообщение
я хотел для cout перегрузить, ну тоесть вводишь
for(int i=0;i<n;i++){
cout<<mas[i]<<ler[i];
}

а выводит только то где ler[i] ==10;
Я уже говорил, что такое использование cout будет развернуто в 2 вызова оператора <<. Нормально это никак не реализуешь. Можно перегрузить операторы для int и char*, в операторе для int записывать в глобальную переменную переданный возраст, а в операторе для строки повторно его проверять и по необходимости выдавать на экран. Можно еще обернуть это в try/catch и при попытке вывода "ненужной" информации выдавать исключение) Но это все извращение. Лучше забыть, что я это говорил
pu4koff вне форума Ответить с цитированием
Старый 19.03.2009, 23:15   #13
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

pu4koff, понятно.
Спасибо большое всем что помогли.

// хотел спросить чуть не забыл что обозначает ostream&

Последний раз редактировалось z3rg; 19.03.2009 в 23:20.
z3rg вне форума Ответить с цитированием
Старый 20.03.2009, 02:02   #14
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Реализовать можно, только если функция перегрузки будет членом класса.
MaTBeu вне форума Ответить с цитированием
Старый 28.02.2010, 06:17   #15
MAsSakrA
 
Аватар для MAsSakrA
 
Регистрация: 26.02.2010
Сообщений: 3
По умолчанию Что за глупости

Re: Перегрузка ввода/вывода в/из потока
А у меня с перегрузкой операторов ввода/вывода такая проблема

простейший класс
Код:
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>>в основной программе использующей класс компилятор выдает
Код:
Compiling...
main.cpp
myClass.cpp
I:\..\myClass.cpp(26) : error C2662: 'GetValue' : cannot convert 'this' pointer from 'const class myClass' to 'class myClass &'
        Conversion loses qualifiers
I:\..\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, и вместо
Код:
// ...
{ return os<<rhs.GetValue(); }
// ...
{ return is>>rhs.GetValue(); }

пишу
Код:
// ...
{ return os<<rhs.itsValue; }
// ...
{ return is>>rhs.itsValue; }

все работает окей. Возникает вопрос, то ли лыжы не едут, то ли я еду по асфальту?
Ты не всегда прав, если ты думаешь что это не так, прочитай сначала...
MAsSakrA вне форума Ответить с цитированием
Старый 28.02.2010, 08:28   #16
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Попробуйте так поправить:
Код:
...
int GetValue() const{ return itsValue; };
...
pu4koff вне форума Ответить с цитированием
Старый 28.02.2010, 14:42   #17
MAsSakrA
 
Аватар для MAsSakrA
 
Регистрация: 26.02.2010
Сообщений: 3
По умолчанию

точно, это помогло, убрало первую ошибку
а вот вторая осталась, хотя вроде всё правильно, но чтото ему не нравиться.
error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
Ты не всегда прав, если ты думаешь что это не так, прочитай сначала...
MAsSakrA вне форума Ответить с цитированием
Старый 28.02.2010, 14:51   #18
MAsSakrA
 
Аватар для MAsSakrA
 
Регистрация: 26.02.2010
Сообщений: 3
По умолчанию

Всё, перегрузил функцию GetValue, теперь всё нормально, что ж я раньше не додумался...
Код:
int GetValue() const{ return itsValue; };
int& GetValue() { return itsValue; };
Ты не всегда прав, если ты думаешь что это не так, прочитай сначала...
MAsSakrA вне форума Ответить с цитированием
Старый 02.03.2010, 02:58   #19
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

раз операторы ввода вывода - друзья класса, использовать методы GetValue - нет необходимости, добавив неконстантный метод, возвращающий ссылку на данные - вы нарушили инкапсуляцию.

операторы ввода - вывода - как правило свободные ф-ии, и если они работают с какими-то обьектами, то они это делают через виртуальные ф-ии у этих обьектов (что-нить типа Load(std:stream&), Save(std:stream&) const).

Автор поста изначально неправильно хочет определить оператор вывода. В нем не должно быть логики, решающей, выводить в поток обьект или нет. Оператор вывода должен выводить обьект в поток и все. Логика должна быть в специально написанной ф-ии, которая выводит массив обьектов или, если юзать стльные алгоритмы - должен быть написан предикат, который и будет решать, надо ли выводить обьект в поток или нет.
_Ч_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачка перегрузка оператора + z3rg Общие вопросы C/C++ 7 17.03.2009 13:23
Перегрузка оператора + (С++) MjRed Помощь студентам 1 15.12.2008 18:57
Перегрузка оператора Crucian Общие вопросы C/C++ 2 22.10.2007 09:44
Использование оператора условия Virtson Microsoft Office Access 2 15.12.2006 16:13