自从第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应该怎么写?

解决方案 »

  1.   

    ooo
    不是定义cout吧???
    重新定义操作符<<
      

  2.   

    如果重新写一个ostream_ex的话,得重写多少东西啊,每一种类型的重载都得写,就没有简单一点的方法?比如如果我要写一个printf_ex的话,就可以用vsprintf很容易的实现
      

  3.   

    ios
     |
    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派生出来的
      

  4.   

    重载一个<<向界面print的操作
    其他还是沿用库函数比较好
      

  5.   

    重载一个<<向界面的<<操作符.
    参考《Essential C++》中的128页。4.10节 “将iostream运算符重载”
      

  6.   

    但是我看fstream里根本就没有重载<<操作符。
    什么书很详细的讲了这块?
    我手边的几本C++的书都只讲了一楼我发贴时讲的那几点
      

  7.   

    typedef basic_fstream<char, char_traits<char> > fstream;template <class E, class T = char_traits<E> >
        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的爷爷有!!!
      

  8.   

    呵呵 《more effective in c++》
         《the design and evolution of c++》
    中我记得曾经看过都有讲到operator << 
    有年头没碰c++了 不是很清楚 
    你可以先去图书馆或者上网浏览一下内容再考虑细看
      

  9.   

    相关的Code可以到侯捷的网站上下载,然后你再仔细研究研究。
      

  10.   

    http://www.jjhou.com/jjtbooks-essential-cpp.htm
      

  11.   

    http://www.jjhou.com/efile-essential-cpp.htm
    看看第四章的代码,其中有重载操作符<<的例子!
      

  12.   

    vcleaner(我没当大哥很久了.......的老大) 
    例子里还是没有我需要的
    例子里主要是:
    ostream operator<<( ostream &os, const num_sequence &ns )
    定义这样的函数,可以把第二个参数直接发送到输出流上
    比如
    num_sequence n;
    cout<<n<<endl;这样的重载可以完成对结构,类的自定义类型的序列化的工作,但是不能满足我上面的要求