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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
VVildVVolf
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
#1

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

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

Добрый день, гуглил на английском языке, но ответа не попалось. Предыстория: некий объекта принимает в качестве параметра ссылку на ostream, куда подсовывается ofstream. Задача в том, что перед действием << требуется сделать дополнительные телодвижения, а точнее обработать данные, которые направляются на выход. Я вижу решение таким, что нужно наследоваться от ofstream и переопределить <<. как это правильно делается нагуглить не удалось. Буду рад приведенным примерам или ссылкам на статьи об этом. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2015, 14:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование от ofstream и перегрузка << (C++):

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

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

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

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

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

Наследование и перегрузка операторов - C++
Помогите, пожалуйста! Ткните носом в ошибки.. не судите строго - первая прога в С++, как и в объектно-ориент программировании: ...

70
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
20.07.2015, 12:41 #31
Цитата Сообщение от VVildVVolf Посмотреть сообщение
Привет всем снова, тут проблема возникла, при передачи в CustomStreamBuf ссылки на ostream. Передаю туда cout - всё норм, всё выводит на консоль, передаю туда ofstream - пустой файл получаю... из-за чего такое может быть?
std::endl при выводе используется? Если нет - работать не будет.
Мой код тот же, кроме fstream:

C++
1
2
   std::ofstream ofs("test_file.txt");
   formatting_ostream stream(ofs, to_lower);
Bash
1
2
3
4
cat test_file.txt 
hello
hello
HeLlO
2
vxg
Модератор
3183 / 1986 / 226
Регистрация: 13.01.2012
Сообщений: 7,675
20.07.2015, 13:07 #32
Цитата Сообщение от ForEveR Посмотреть сообщение
Если нет - работать не будет
о ужас %/ зачем они сделали синк по эндл?? можно победить сделав руками флэш. ну или в оверфлоу ловить делители
0
VVildVVolf
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 13:12  [ТС] #33
на самом деле синк в моём конкретно случае мало волнует (не бейте меня, я его в деструкторе стрима вызываю...), и получается endl и '\n' не одно и тоже? попробую в конце принудительно заталкивать endl для верности... но при указании папки - так ничего не создаётся, ни на домашнем ноуте, ни на рабочей машинке, даже при запуске с правами админа...
0
vxg
Модератор
3183 / 1986 / 226
Регистрация: 13.01.2012
Сообщений: 7,675
20.07.2015, 13:45 #34
Цитата Сообщение от VVildVVolf Посмотреть сообщение
я его в деструкторе стрима вызываю
так тоже можно. странно что он сам не вызывается. или может он вызывается но после того как поток файла убился. я всегда думал что эндл это просто вставка платформозависимого делителя. но наверное она еще и синк зовет. хз. зачем вам пихать эндл если все работает? или все еще не работает? у меня файл создается - почему у вас нет? может не нужно / ставить в голову?
0
VVildVVolf
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 13:52  [ТС] #35
Цитата Сообщение от vxg Посмотреть сообщение
или все еще не работает
не работает на 2х машинах причем файл не создаётся, и со слэшем, и без, и с "~/" и с "./" и всё тоже самое с обратными слэшами пробовал..

причем (если файл создаётся в той же папке, что и прога) такой код:
C++
1
2
3
4
5
6
7
ofstream output;
    output.open(outFileName);
 
    output<<"begin"<<endl;
    
    p = new Parser(output);
    output<<"end"<<endl;
генерит файл с текстом
begin
end
0
vxg
Модератор
3183 / 1986 / 226
Регистрация: 13.01.2012
Сообщений: 7,675
20.07.2015, 14:03 #36
Цитата Сообщение от VVildVVolf Посмотреть сообщение
не работает
попробуйте абсолютный путь. может у вас рабочая папка какая-нибудь экзотическая при вызове
0
VVildVVolf
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 14:15  [ТС] #37
Цитата Сообщение от vxg Посмотреть сообщение
попробуйте абсолютный путь. может у вас рабочая папка какая-нибудь экзотическая при вызове
не, не даёт... это причем даже в отдельном проекте, где пытаюсь просто тупо в файл записать.

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <fstream>
 
using namespace std;
int main(){
    ofstream os2("C://lol/lout.txt");
    os2<<"tro"<<endl;
    os2.close();
    return 0;
}
вот это не создаёт файл ни по абсолютному, ни по относительному, только если тупо имя указать - в текущей и всё...
0
Avazart
20.07.2015, 14:21
  #38

Не по теме:

Цитата Сообщение от vxg Посмотреть сообщение
ои глаза! мои прекрасные глаза!! до сих пор не могу привыкнут к этим штукам. и никогда наверное не привыкну
Так же фигня, а уши уши ведь звучит как нецензурщина ....

0
vxg
Модератор
3183 / 1986 / 226
Регистрация: 13.01.2012
Сообщений: 7,675
20.07.2015, 14:24 #39
Цитата Сообщение от VVildVVolf Посмотреть сообщение
вот это не создаёт файл ни по абсолютному, ни по относительному, только если тупо имя указать - в текущей и всё
ну вы же понимаете что это невозможно)

Добавлено через 50 секунд
полагаю что то с правами или хз чем но не с программой. что то мне подсказывает что вам нужно попробовать порабоать в винде
0
VVildVVolf
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 14:30  [ТС] #40
Цитата Сообщение от vxg Посмотреть сообщение
ну вы же понимаете что это невозможно)
я чего-то в упор не вижу(я что-то делаю так, что при этом невозможно создать файл), или невозможен факт несоздования файла с папкой?Оо если второе - готов поспорить)

Добавлено через 55 секунд
Цитата Сообщение от vxg Посмотреть сообщение
полагаю что то с правами или хз чем но не с программой. что то мне подсказывает что вам нужно попробовать порабоать в винде
Вы хотели сказать НЕ в винде?

Добавлено через 2 минуты
да и если б была проблема с правами,тогда б и в своей директории не разрешал создавать? я ведь и из-под диска C с правами админа запускал...
0
vxg
Модератор
3183 / 1986 / 226
Регистрация: 13.01.2012
Сообщений: 7,675
20.07.2015, 14:37 #41
Цитата Сообщение от VVildVVolf Посмотреть сообщение
Вы хотели сказать НЕ в винде?
просто показалась что вы из Этих.. которые не в винде)
раз уж так рассказывайте что за система что за диски что за пользователи что за среда разработки есть ли антивирусы, DEP и прочая шляпа
0
VVildVVolf
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 14:43  [ТС] #42
Цитата Сообщение от vxg Посмотреть сообщение
просто показалась что вы из Этих.. которые не в винде)
странно, с чего бы..
на ноуте винда (ваз 2107) стоит на виртуалке, никаких антивирусов, ниче (скорее вирусов могло накачаться), специально ни права ничего не настраивал, только гостевое расширение виртуалБокса, студия 2012я.
0
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,044
Записей в блоге: 17
20.07.2015, 14:46 #43
Цитата Сообщение от VVildVVolf Посмотреть сообщение
C++
1
ofstream os2("C://lol/lout.txt");
C++
1
ofstream os2("C:\\lol\\lout.txt");
2
VVildVVolf
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
20.07.2015, 14:48  [ТС] #44
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
ofstream os2("C:\\lol\\lout.txt");
и так, и
C++
1
ofstream os2("C:\\\\lol\\lout.txt");
тоже
0
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,044
Записей в блоге: 17
20.07.2015, 14:49 #45
Накой 4 слеша?
0
20.07.2015, 14:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2015, 14:49
Привет! Вот еще темы с ответами:

Наследование и перегрузка методов - C++
Здравствуйте. Пытаюсь выполнить упр. 8 из главы 11 книги Р.Лафоре &quot;ООП в С++&quot;, соорудил такое древо классов (картинка в конце поста). Если...

Наследование и перегрузка операторов. - C++
У меня есть базовый класс class myfloat { protected: int c; int z; void reduce(); public: myfloat(float num=0);

Наследование, перегрузка, конструктор - C++
#include &lt;iostream&gt; class animal { public: animal() { } animal(int a) { age = a; } ~animal() { } void set_age(int b) { age...

Перегрузка оператора ввода и наследование - C++
Добрый день! Обращаюсь по такому поводу. Есть одна программа, в которой требуется перегрузить операторы ввода.вывода для одного из...


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

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

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