Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 23.03.2015
Сообщений: 55
1

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

04.09.2016, 13:56. Показов 2135. Ответов 4
Метки нет (Все метки)

Подскажите как правильно перегружать потоки, вот что я делал и какие ошибки появились
Как правильно перегружать потоки записи и чтения в файл?
C++
1
2
3
4
5
6
7
8
    friend fstream& operator>> (fstream& s, Some& some){
        s.open("file.dat", ios::binary | ios::out);
        cout << "Введите число: ";
        s.write(reinterpret_cast<char*>(some.a), sizeof(int)) >> some.a;//binary '>>' : no operator found which takes a left-hand operand of type 'std::basic_ostream<char,std::char_traits<char>>' (or there is no acceptable conversion)
        cout << "Введите строку: ";
        s.write(reinterpret_cast<char*>(some.str.c_str()), some.str.size()) >> some.str;//'reinterpret_cast' : cannot convert from 'const char *' to 'char *'
        return s;
    }
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2016, 13:56
Ответы с готовыми решениями:

Перегрузка ввода/вывода в/из потока
Никогда потоками не пользовался, поэтому не знаю. Как перегрузить для ввода из потока оператор...

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

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

Перегрузка потока ввода
Помогите мне пожалуйста. Пыта #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; ...

4
1378 / 405 / 144
Регистрация: 22.10.2014
Сообщений: 872
04.09.2016, 14:22 2
Лучший ответ Сообщение было отмечено Chronid как решение

Решение

Chronid,
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
#include <iostream>
#include <fstream>
 
struct Some
{
    int a;
    std::string str;
 
    friend std::ostream& operator<<(std::ostream& s, const Some& some)
    {
        s << some.a << " " << some.str;
        return s;
    }
 
    friend std::istream& operator>>(std::istream& s, Some& some)
    {
        s >> some.a >> some.str;
        return s;
    }
};
 
int main()
{
    const std::string inFileName = "input";
    const std::string outFileName = "output";
 
    Some s;
    std::cout << "Заполните структуру Some по следующему шаблону: int string :";
    std::cin >> s;
    std::cout << "Вы заполнили : " << s << std::endl;
    {
        std::cout << "Сохраним структуру в файл " << outFileName << std::endl;
        std::ofstream outFile { outFileName };
        outFile << s;
    }
    {
        std::cout << "Загрузим из файла " << inFileName << " : " << std::endl;
        std::ifstream inFile { inFileName };
        inFile >> s;
    }
    std::cout << "Из файла прочитано: " << s;
}
1
2 / 2 / 0
Регистрация: 23.03.2015
Сообщений: 55
04.09.2016, 14:55  [ТС] 3
Оказывается все намного проще чем я думал..
Спс огромное, а не покажите пример как в бинарник записать и считать потом?
Я так понимаю в
Цитата Сообщение от Nosey Посмотреть сообщение
std::ofstream outFile { outFileName };
нужно добавить флаг
C++
1
ios::binary
и все?
0
1378 / 405 / 144
Регистрация: 22.10.2014
Сообщений: 872
04.09.2016, 15:46 4
Цитата Сообщение от Chronid Посмотреть сообщение
и все?
Нет ((. Надеюсь что-то понятно:
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
#include <iostream>
#include <fstream>
#include <string>
 
template<typename T>
struct IOBinary: T
{
    using T::T;
    template<typename T2>
    friend IOBinary& operator<<(IOBinary& s, const T2& value)
    {
        s.write(reinterpret_cast<const char*>(&value), sizeof(T2));
        return s;
    }
 
    template<typename T2>
    friend IOBinary& operator>>(IOBinary& s, T2& value)
    {
        s.read(reinterpret_cast<char*>(&value), sizeof(T2));
        return s;
    }
 
    template<typename T2>
    friend IOBinary& operator<<(IOBinary& s, const std::basic_string<T2>& value)
    {
        s << value.size();
        s.write(reinterpret_cast<const char*>(value.c_str()),
                sizeof(T2) * value.size());
        return s;
    }
 
    template<typename T2>
    friend IOBinary& operator>>(IOBinary& s, std::basic_string<T2>& value)
    {
        typename std::basic_string<T2>::size_type size = 0;
        s >> size;
        value.reserve(size);
        s.read(const_cast<char*>(value.c_str()), sizeof(T2) * size);
        return s;
    }
};
 
using OFBinary = IOBinary<std::ofstream>;
using IFBinary = IOBinary<std::ifstream>;
 
struct Some
{
    int a;
    std::string str;
 
    friend OFBinary& operator<<(OFBinary& s, const Some& some)
    {
        s << some.a << " " << some.str;
        return s;
    }
 
    friend IFBinary& operator>>(IFBinary& s, Some& some)
    {
        s >> some.a >> some.str;
        return s;
    }
 
    friend std::ostream& operator<<(std::ostream& s, const Some& some)
    {
        s << some.a << " " << some.str;
        return s;
    }
 
    friend std::istream& operator>>(std::istream& s, Some& some)
    {
        s >> some.a >> some.str;
        return s;
    }
};
 
int main()
{
    const std::string inFileName = "output";
    const std::string outFileName = "output";
 
    Some s;
    std::cout << "Заполните структуру Some по следующему шаблону: int string :";
    std::cin >> s;
    std::cout << "Вы заполнили : " << s << std::endl;
    {
        std::cout << "Сохраним структуру в файл " << outFileName << std::endl;
        OFBinary outFile { outFileName, std::ios::binary };
        outFile << s;
    }
    {
        std::cout << "Загрузим из файла " << inFileName << " : " << std::endl;
        IFBinary inFile { inFileName, std::ios::binary };
        inFile >> s;
    }
    std::cout << "Из файла прочитано: " << s;
}
И не забывайте что выше вы видите говнокод.
1
2 / 2 / 0
Регистрация: 23.03.2015
Сообщений: 55
05.09.2016, 19:14  [ТС] 5
Цитата Сообщение от Nosey Посмотреть сообщение
Нет ((. Надеюсь что-то понятно:
Мать моя женщина...
До шаблонов доберусь через недельку другую
Но местами все таки понятно
Спс огромное
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2016, 19:14

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

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

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

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


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

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

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