自从第n次因为某个角落的printf有问题,导致程序崩溃以后,我终于下定决心,抛弃printf,scanf这些不做类型检测,好用又危险的东东。
我决定使用C++的输入输出,我用的是<iostream>(STL带的,using namespace std)
标准输入输出流:cout,cin,cerr,输入,输出,各种类型,各种格式,hex,endl,flush,等等,没有问题
文件流:使用fstream进行文件操作,打开关闭,读写文件,seek, 读写错误判断,也没有问题
字符流:使用stringstream, 也了解了。
根据以上,我有了一个想法,我要重新定义cout, 让它向图形界面上输出,而不是输出到标准输出,或者输出到文件,不知该如何着手。这个输出名字不一定要叫cout,换一个名字也可,比如cgout。
按照我的设想,输出时,使用语句
cgout<<"Hello world testnumber="<<hex<<0x12345<<endl;
就把相应的信息显示到图形界面里(如果必要,还可能把这些信息作为日志记录下来)
这个cgout应该怎么写?
我决定使用C++的输入输出,我用的是<iostream>(STL带的,using namespace std)
标准输入输出流:cout,cin,cerr,输入,输出,各种类型,各种格式,hex,endl,flush,等等,没有问题
文件流:使用fstream进行文件操作,打开关闭,读写文件,seek, 读写错误判断,也没有问题
字符流:使用stringstream, 也了解了。
根据以上,我有了一个想法,我要重新定义cout, 让它向图形界面上输出,而不是输出到标准输出,或者输出到文件,不知该如何着手。这个输出名字不一定要叫cout,换一个名字也可,比如cgout。
按照我的设想,输出时,使用语句
cgout<<"Hello world testnumber="<<hex<<0x12345<<endl;
就把相应的信息显示到图形界面里(如果必要,还可能把这些信息作为日志记录下来)
这个cgout应该怎么写?
解决方案 »
- OnPaint中cpu的使用问题
- 利用CInternetSession及相关类进行网页下载时,遇到302状态。高手过来看看。100分求解
- 请问'mreqv6' uses undefined struct 'ipv6_mreq'是由于什么引起的?
- 疯求水晶报表的下载地址.我的邮箱: [email protected]
- 如何实现把指定大小的BMP文件转换为图标?
- 使用AfxMessageBox(),如何出现OK和Cancel两个按钮,并且返回这两种不同的选择值?
- Windows SDK 如何实现窗口重绘? 谢谢!!~~~
- COM+高手请进,急急急。。。
- error C2064: 项不会计算为接受 2 个参数的函数
- 如何在VC中实现对局域网中计算机的全部扫描并用树形(类似资源浏览器)显示
- 【◆诚◆心◆求◆教◆】 如何让CListCtrl的某一行的背景颜色改变?解决马上给分!
- 请问怎么取得状态栏里某个Pane的CWnd
不是定义cout吧???
重新定义操作符<<
|
ios_basic
|
basic_ostream 即ostreambasic_ostream
这个里面声明了operator <<namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;
};basic_fstream由basic_iostream派生出来的,后者由basic_ostream派生出来的
其他还是沿用库函数比较好
参考《Essential C++》中的128页。4.10节 “将iostream运算符重载”
什么书很详细的讲了这块?
我手边的几本C++的书都只讲了一楼我发贴时讲的那几点
class basic_fstream : public basic_iostream<E, T>template <class E, class T = char_traits<E> >
class basic_iostream : public basic_istream<E, T>,
public basic_ostream<E, T>fstream的爷爷有!!!
《the design and evolution of c++》
中我记得曾经看过都有讲到operator <<
有年头没碰c++了 不是很清楚
你可以先去图书馆或者上网浏览一下内容再考虑细看
看看第四章的代码,其中有重载操作符<<的例子!
例子里还是没有我需要的
例子里主要是:
ostream operator<<( ostream &os, const num_sequence &ns )
定义这样的函数,可以把第二个参数直接发送到输出流上
比如
num_sequence n;
cout<<n<<endl;这样的重载可以完成对结构,类的自定义类型的序列化的工作,但是不能满足我上面的要求