Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54

Наследование от ofstream и перегрузка <<

14.07.2015, 14:36. Показов 6459. Ответов 70
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, гуглил на английском языке, но ответа не попалось. Предыстория: некий объекта принимает в качестве параметра ссылку на ostream, куда подсовывается ofstream. Задача в том, что перед действием << требуется сделать дополнительные телодвижения, а точнее обработать данные, которые направляются на выход. Я вижу решение таким, что нужно наследоваться от ofstream и переопределить <<. как это правильно делается нагуглить не удалось. Буду рад приведенным примерам или ссылкам на статьи об этом. Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.07.2015, 14:36
Ответы с готовыми решениями:

Перегрузка ifstream и ofstream?
Есть класс //test.h cass test { private: int i; string st; public:

Перегрузка ofstream, istream
В общем-то ошибка в описана в самом коде //main.cpp #include &quot;ui.cpp&quot; int main() { ui iu; iu.menu(); iu.casein(); ...

Перегрузка ofstream / ifstream для классов
Приветствую! Возникла трудность. Имеется класс с данными. Необходимо реализовать чтение и ввод объекта класса в файл посредством перегрузки...

70
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,469
20.07.2015, 14:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от VVildVVolf Посмотреть сообщение
Вы хотели сказать НЕ в винде?
просто показалась что вы из Этих.. которые не в винде)
раз уж так рассказывайте что за система что за диски что за пользователи что за среда разработки есть ли антивирусы, DEP и прочая шляпа
0
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 14:43  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
просто показалась что вы из Этих.. которые не в винде)
странно, с чего бы..
на ноуте винда (ваз 2107) стоит на виртуалке, никаких антивирусов, ниче (скорее вирусов могло накачаться), специально ни права ничего не настраивал, только гостевое расширение виртуалБокса, студия 2012я.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2015, 14:46
Цитата Сообщение от VVildVVolf Посмотреть сообщение
C++
1
ofstream os2("C://lol/lout.txt");
C++
1
ofstream os2("C:\\lol\\lout.txt");
2
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 14:48  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
ofstream os2("C:\\lol\\lout.txt");
и так, и
C++
1
ofstream os2("C:\\\\lol\\lout.txt");
тоже
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2015, 14:49
Накой 4 слеша?
0
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 14:50  [ТС]
да просто что уже только не пробывал
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2015, 14:52
А что тут пробовать, тут либо права либо неправильный путь или и то и другое.
Но очивидно что так как вы указываете слеши неправильно.
В винде слеши должны быть "\" плюс еще один для экранирования как строки.
0
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 14:56  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
либо права
ну а почему тогда в своей-то директории создаёт? разве в винде есть такая фигня, чтоб прога в своей директории только в корне могла файлы создавать?

Добавлено через 2 минуты
хм, при существующей папке, оказывается, пишет (с обратными слэшами), но создавать папку в упор не хотит...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2015, 14:59
Цитата Сообщение от VVildVVolf Посмотреть сообщение
ну а почему тогда в своей-то директории создаёт? разве в винде есть такая фигня, чтоб прога в своей директории только в корне могла файлы создавать?
А что прога лежит где-то в системной папке?

Добавлено через 1 минуту
Цитата Сообщение от VVildVVolf Посмотреть сообщение
но создавать папку в упор не хотит...
А с какого он папки должен создавать сам за Вас?
0
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 15:04  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
А что прога лежит где-то в системной папке?
нет, в документах
Цитата Сообщение от Avazart Посмотреть сообщение
А с какого он папки должен создавать сам за Вас?
http://stackoverflow.com/quest... ctory-in-c или нельзя этому верить?
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
20.07.2015, 15:12
Цитата Сообщение от VVildVVolf Посмотреть сообщение
http://stackoverflow.com/questions/1...directory-in-c или нельзя этому верить?
Ну и где там папки создаются? fopen не создает папки, а по сути ведь он выполняет основную работу. /tmp - изначально существующая папка.
0
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 15:19  [ТС]
хотя пардон, там не говорится, что оно должно создать подпапку...

Добавлено через 5 минут
Придется вызывать
C++
1
2
3
#include <direct.h>
...
    mkdir("C:\\lol\\");
окей, с одной проблемой разобрались, всем участникам объявляется благодарность)
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.07.2015, 15:34
Цитата Сообщение от vxg Посмотреть сообщение
я всегда думал что эндл это просто вставка платформозависимого делителя. но наверное она еще и синк зовет.
http://en.cppreference.com/w/cpp/io/manip/endl
Вставляет символ и зовет flush. flush в свою очередь зовет sync.
2
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2015, 15:43
boost/filesystem create_directory
Пути к файлам

Не по теме:

filesystem вроде как должны были включить в стандарт ?

0
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 15:46  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
boost/filesystem create_directory
Пути к файлам
с этим вроде разобрался (слэши + несоздание подпапок автоматически), проблема осталась только при вводе данных в сам поток
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.07.2015, 15:49

Не по теме:

Avazart, В 17 по идее.



Добавлено через 32 секунды
VVildVVolf, Касательно проблем с выводом - показывайте код.
0
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 16:01  [ТС]
Покажу частично (чтоб сообщение было компактнее), если недостаточно, выложу весь класс:
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
//.h
namespace FilteringOutput{
 
    class FilteringStreamBuf : public std::streambuf{
    public:
        FilteringStreamBuf(ostream& os);
        void ForceWrite(const char* str);
        virtual ~FilteringStreamBuf();
    protected:
        virtual int sync();
        virtual int_type overflow(int_type __c = traits_type::eof());
 
        virtual void Put(const char c);
    private:
        bool LastSymbolIsSeparator;
        bool IsSeparator(const char c)const;
        void ToOutput(const char* str);
        ostream& output;
        string buffer;
 
        static const int MAX_LINE = 80;
    };
 
};
 
//.cpp
FilteringStreamBuf::FilteringStreamBuf(ostream& os):output(os),LastSymbolIsSeparator(false){
    //DEBUG
    output<<"DEBUG 1";
    //DEBUG
}
 
FilteringStreamBuf::~FilteringStreamBuf(){
    sync();
}
 
 
FilteringStreamBuf::int_type FilteringStreamBuf::overflow(int_type __c)
{
    auto c =  traits_type::to_char_type(__c);
 
    if (IsSeparator(c)){
        if (!LastSymbolIsSeparator){
            Put(' ');
        }
    }else{
        Put(c);
    }
 
    return traits_type::not_eof(__c);
}
 
int FilteringStreamBuf::sync(void)
{
    //DEBUG
    output<<"DEBUG 2";
    //DEBUG
 
    ToOutput(buffer.c_str());
 
    buffer.clear();
    return 0;
}
второй дебаг никогда не выводится, несмотря на то, что выполнение доходит до него (в отладчике)
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2015, 16:35
C++
1
output<<"DEBUG 2"<<endl;
или
C++
1
2
output<<"DEBUG 2";
output.flush();
0
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 16:38  [ТС]
ни то, ни другое не спасло, да и в конструкторе без того и без другого DEBUG 1 выводится
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.07.2015, 16:55
VVildVVolf, Гм. Лучше весь код и его использование. Буфер для стрима не меняется, поэтому вывод должен быть. Вывод идет в cout или в fstream?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.07.2015, 16:55

Перегрузка ifstream и ofstream для работы с файлами в little-endian формате?
Всем привет, мне нужно реализовать классы для работы с файлами в little-endian формате. Для этого задумал сделать public-потомки...

перегрузка и наследование.
Помогите,пожалуйста. В этой задаче нужно сделать перегрузку и наследование. using System; using System.Collections.Generic; ...

Наследование + перегрузка
В общем вот код: class Program { static void Main(string args) { Class2 cl2 = new...

Наследование и перегрузка <<
Здравствуйте! Столкнулся со следующей проблемой: class A { int data,info; // .. public: friend void operator...

Наследование. Перегрузка операторов
Не понятно, почему компилятор ругается на 49 строку - &quot;отстутствует оператор &quot;++&quot;, соответствующий этим операндам&quot;. В производном...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru