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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.61
morlord
2 / 2 / 0
Регистрация: 05.08.2010
Сообщений: 8
09.12.2010, 10:43     Перегрузка оператора ввода ">>" #1
нужно перегрузить оператор ввода для класса Comp? перегрузил, но выдается ошибка
error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>
при переходе к месту ошибки показывается следующий код в файле istream
C++
1
2
3
private:
    streamsize _Chcount;    // the character count
    };
мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Comp
{public:
//...
istream operator>>(istream &stream);
//...
}
 
istream Comp::operator>>(istream &stream)
{
    int type;
    stream>>_num;
    stream>>_cnum;
    stream>>IsWork;
    stream>>type;
    if (type==0) _type=office;
    if (type==1) _type=server;
    if (type==1) _type=monitoring;
    return stream;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2010, 10:43     Перегрузка оператора ввода ">>"
Посмотрите здесь:

Перегрузка оператора ввода и наследование C++
Перегрузка оператора ввода C++
Перегрузка оператора ввода C++
Перегрузка оператора ввода вывода C++
C++ Перегрузка оператора ввода ,вывода
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 399
09.12.2010, 11:00     Перегрузка оператора ввода ">>" #2
перезагрузка должна быть дружественной, т.к. используеться класс iostream и пользовательский,
C++
1
friend &istream operator>>(istream& s,Comp& c)
Ну по крайней мере так описывается в учебниках и примерах, которые я разбирал)
morlord
2 / 2 / 0
Регистрация: 05.08.2010
Сообщений: 8
09.12.2010, 21:39  [ТС]     Перегрузка оператора ввода ">>" #3
операция может быть перегружена как дружественная функция и как функция класса
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.12.2010, 17:33     Перегрузка оператора ввода ">>" #4
morlord, да, эта операция может быть перегружена как функция класса. Но тогда вам придётся писать нелепое ObjectOfClass >> std::cin; Потому что если первый операнд перегруженной операции должен быть не экземпляром класса, операция обязательно должна быть перегружена как дружественная, а в нашем случае в качестве первого операнда используется объект класса iostream.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.12.2010, 17:35     Перегрузка оператора ввода ">>" #5
Не обязательно. Перегружать можно и вне класса.
Greeezly
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
25.02.2014, 22:49     Перегрузка оператора ввода ">>" #6
C++
1
using std::istream;
C++
1
2
3
4
5
class ABC
{
public:
friend istream& operator>>(istream &, ABC &);
};
Yandex
Объявления
25.02.2014, 22:49     Перегрузка оператора ввода ">>"
Ответ Создать тему
Опции темы

Текущее время: 08:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru