当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 我的代码是 set cnn = server.createobject("adodb.connection") cnnstr="provider=microsoft.jet.oledb.4.0;data source=" & server.mappath("ourbbs.mdb") cnn.open cnnstr set ......
    摘要: 同一个包中的文件中公有的类访问出错! 我有三个java文件,每个文件都都有 package pp1; 其中两个文件是定义两个公有类,第三个文件中的类继承第二个文件公有类,可是编译时找不到第二个文件的类。 ......


operator <<

我建了一个类,用来往文件中写东西,我继承了std::ofstream   ,如果我执行以下操作,会不会有“不良反应”,不过我想知道,它写到哪里去了。  
  class   CMsgLog   :   public   std::ofstream      
  {  
  public:  
          void   OpenFile();  
  }  
   
  void   CMsgLog::   OpenFile()  
  {  
          if   (   m_bWrite   )  
          {  
                  open(   "test.txt",   std::ios_base::app   );  
            }  
  }  
   
  void   CTest::Test()  
  {  
          CMsgLog   log;  
          log   <<   "测试";   //注意我没有执行OpenFile  
                                        //也就是说,我没有打开文件,那“测试”写到哪里去了?  
  }  
   
   
  请高手值点。  
  谢谢!!!  
 

NO.1   作者: solotony

zhenbe(一头栽在C里面)  
  stlport的源代码比较复杂,如果你对标准库的结构不清楚的话可能不好找,  
  下面只说说我查的过程和结果:  
  std::ofstream继承自std::basic_ostream  
  所以我查看了后者的无参构造函数,发现它对所有内部成员都赋零或调用无参构造.  
  进而我注意了basic_ofstream中没有关于operator<<的定义,所以进而发现它定义在  
  basic_ostream中:  
   
      _Self&   operator<<(basic_streambuf<_CharT,   _Traits>*   __buf);  
  #   ifndef   _STLP_NO_FUNCTION_TMPL_PARTIAL_ORDER  
      //   this   is   needed   for   compiling   with   option   char   =   unsigned  
      _Self&   operator<<(unsigned   char   __x)   {   _M_put_char(__x);   return   *this;   }  
  #   endif  
   
  进而发现对<<操作的关键在于_M_put_char(__x);   函数  
  而这一函数有一个前置条件:  
      sentry   __sentry(*this);  
      if   (__sentry)   {  
            ...  
      }  
  sentry是一个内部类,定义在basic_ostream中  
  而它的逻辑转型定义为  
  operator   bool()   const   {   return   _M_ok;   }  
  即_M_ok的值.  
  根据sentry的构造函数_M_ok(_M_init(__str))  
  其中__str是basic_stream本身,_M_init可能类似basic_stream的初始化函数.  
  这里我们可以想当然的说_M_init一定返回false.所以结果就是  
  <<操作,根本就没用,输入的数据被简单的忽略了.  
 


    摘要: 如题 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE