Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Цепочка методов в C++

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Цепочка методов в C++
Имя
Сообщение << Старые топики   Новые топики >>
Цепочка методов в C++ - 2009-11-16 18:18:36.020000   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
Пытаюсь тут реализовать цепочку методов, в данном случае наподобии cout<<1<<2<<3<<"char";

class File { protected: ofstream out; public: File(char *name){ this-&gt;out.open(name,ios::out); outINI(this-&gt;out); } template&lt;typename _FIT&gt; File *operator&lt;&lt; (_FIT &in){ this-&gt;out&lt;&lt;in; return this; } ~File(){ this-&gt;out.close(); } };
должно быть так

File fp("filename.txt");

fp <<"line1\n"
<<"line2\n"
<<setw(10)<<"iomanip";
Post #: 1
RE: Цепочка методов в C++ - 2009-11-16 18:59:19.233333   
psina007

Сообщений: 98
Оценки: 0
Присоединился: 2009-05-09 22:41:33.580000
А в чем собственно проблема? Если компилятор ругается, то давайте сюда список ошибок, будем разбираться.
Post #: 2
RE: Цепочка методов в C++ - 2009-11-16 23:25:59.530000   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
D:\CPP\ff.cpp(50) : error C2296: '<<' : illegal, left operand has type 'class File *'
D:\CPP\ff.cpp(50) : error C2297: '<<' : illegal, right operand has type 'char [2]'
D:\CPP\ff.cpp(60) : error C2296: '<<' : illegal, left operand has type 'class File *'
D:\CPP\ff.cpp(60) : error C2297: '<<' : illegal, right operand has type 'double'
……..
Post #: 3
RE: Цепочка методов в C++ - 2009-11-17 00:26:23.936666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: Smelo
File *operator&lt;&lt; (_FIT &in){ this-&gt;out&lt;&lt;in; return this; }

Не, так ведь не покатит. Насчёт того как надо перегружать << – это я не помню, оставлю это на твоей совести. Но ты возвращаемый тип выбрал не тот. Как будет работать: `fp <<"line1\n"<<"line2\n"'? Сначала отработает `fp << "line1\n"', выведет строчку и вернёт указатель на fp. Следующим шагом, соответственно будет что-то в стиле: `&fp << "line2\n"': &fp – это указатель на fp, который вернёт первое выполнение оператора. Ненене, так не покатит. Надо из оператора возвращать `File&', то есть ссылку на File.
Post #: 4
RE: Цепочка методов в C++ - 2009-11-17 00:32:14.563333   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
так ошибок нет, но и не работает нифига =(
class File { protected: ofstream out; public: File(char *name){ this-&gt;out.open(name,ios::out); outINI(this-&gt;out); } template&lt;typename _FIT&gt; File &operator&lt;&lt; (_FIT &in){ this-&gt;out&lt;&lt;in; return *this; // бред, не? } ~File(){ this-&gt;out.close(); } };
Post #: 5
RE: Цепочка методов в C++ - 2009-11-17 12:42:32.413333   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
вычитал щас, что для операций постинкремента нужно добавлять параметр int, у меня не вышло, ругается

сделал cout

File &operator<< (_FIT &in){
cout <<in;
this->out<<in;
return *this;
}

выводит

получается проблема в this->out
одна я пробовал и без this
результат один
Post #: 6
RE: Цепочка методов в C++ - 2009-11-17 15:42:01.230000   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
Всё, я понял, класс рабочий
проблема была в cin.get() из-за которого не работал деструктор
типа
void main(){
/*….*/
cin.get();
}

Как быть? cin.get() нужен, а вручную вызывать деструктор не интересно
Post #: 7
RE: Цепочка методов в C++ - 2009-11-17 15:56:33.876666   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
решил при помощи
system("pause");
Post #: 8
RE: Цепочка методов в C++ - 2009-11-19 06:58:46.606666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: Smelo

Как быть? cin.get() нужен, а вручную вызывать деструктор не интересно


сбрасывать буфер канала после записи в него:

out &lt;&lt; in; out.flush();
Post #: 9
RE: Цепочка методов в C++ - 2009-11-19 19:49:37.673333   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
а в этом случае экземпляр ofstream out не уничтожается? как в случае с close()
Post #: 10
RE: Цепочка методов в C++ - 2009-11-19 21:39:13.510000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: Smelo

а в этом случае экземпляр ofstream out не уничтожается? как в случае с close()


нет. сбрасываются накопленные в streambuf данные. аналогичное действие выполняется при передаче в поток std::endl

http://www.cplusplus.com/reference/iostream/manipulators/flush/

здесь о streambuf:

http://www.slac.stanford.edu/comp/unix/gnu-info/iostream_5.html#SEC26
Post #: 11
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Цепочка методов в C++







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.