??xml version="1.0" encoding="utf-8" standalone="yes"?>久久午夜免费视频,国产免费久久精品99re丫y,亚洲嫩草影院久久精品http://www.shnenglu.com/zhaoyao91/category/16351.html学习ȝ与经验交?/description>zh-cnTue, 07 Jun 2011 06:26:07 GMTTue, 07 Jun 2011 06:26:07 GMT60C++中对点数的格式化显C?/title><link>http://www.shnenglu.com/zhaoyao91/archive/2011/05/31/147740.html</link><dc:creator>今晚打老虎</dc:creator><author>今晚打老虎</author><pubDate>Tue, 31 May 2011 03:38:00 GMT</pubDate><guid>http://www.shnenglu.com/zhaoyao91/archive/2011/05/31/147740.html</guid><wfw:comment>http://www.shnenglu.com/zhaoyao91/comments/147740.html</wfw:comment><comments>http://www.shnenglu.com/zhaoyao91/archive/2011/05/31/147740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zhaoyao91/comments/commentRss/147740.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zhaoyao91/services/trackbacks/147740.html</trackback:ping><description><![CDATA[<div class="dzdr35b" id="entryjj">以下是{帖内容:<br />-------------------------------------------------------------------------------------------------------------------------------------------------------------- <br /> <strong>W二电脑|导读:</strong>框、关pL据库、金融程序、SMSE序及一切处理数据文件的E序Q需要控制小数点后的数位的情况非常普遍Q本文中要讲解如何用简单的Ҏ来控制小CQ另外,q要揭开字符串及数据_ֺ的一点点秘密。  问题的引出  如有一个函敎ͼ其可接受一个long double参数Qƈ参数{换ؓ字符Ԍl果字符串应保留两位数Q例如,点?23.45678应该生成"123.45"q样?.. <div id="z3l3j53" class="clear"></div></div> <div class="nbvb3fj" id="adtd"><script type="text/javascript" src="http://www.002pc.com/d/js/acmsd/thea11.js"></script><script type="text/javascript">google_ad_client = "pub-9414907233156792";/* 300x250, 创徏?09-9-10 */google_ad_slot = "5594755314";google_ad_width = 300;google_ad_height = 250;</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><script src="http://pagead2.googlesyndication.com/pagead/js/r20110518/r20110506/show_ads_impl.js"></script><script src="http://googleads.g.doubleclick.net/pagead/test_domain.js"></script><script src="http://pagead2.googlesyndication.com/pagead/render_ads.js"></script><script>google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);</script></div>  <strong>正文Q?/strong>在许多应用程序领域中Q都需要控制小数点后的数位,但是点数对此不能提供直接的支持。怎样对程序中的QҎ据进?整齐"地格式化呢?在此我们有一个迂回的ҎQ先把它们{换ؓ字符Ԍ格式化后以文本Ş式显C出<span>来?</span><br /><br /><span> </span><span> 在日?/span><a class="infotextkey" target="_blank"><span>~程</span></a>?-包括对话框、关p?a class="infotextkey" target="_blank"><a class="infotextkey" target="_blank">数据?/a></a>、金融程序、SMSE序及一切处理数据文件的E序Q需要控制小数点后的数位的情况非常普遍Q本文中要讲解如何用简单的Ҏ来控制小CQ另外,q要揭开字符串及数据_ֺ的一点点秘密?br /><br />  问题的引?br /><br />  如有一个函敎ͼ其可接受一个long double参数Qƈ参数{换ؓ字符Ԍl果字符串应保留两位数Q例如,点?23.45678应该生成"123.45"q样的字W串。表面上看来q是一个意义不大的~程问题Q然而,如果真要在实际中z上用场Q函数应设计为具有一定弹性,以允许调用者指定小C数。另外,函数也应该能够处理各U异常情况,如像123.0?23q样的整数?br />在开始之前,先看一下编?优雅"C++<a class="infotextkey" target="_blank">代码</a>时的两句"真言"Q?br /><br />  "真言"1Q无Z旉要格式化一个数|都应先{换ؓ一个字W串。这样可保证每位数刚好占据一个字W?br /><br />  "真言"2Q在需要{换ؓ字符串时Q请使用<sstream>库?br /><br />  转换函数的接口非常简z:W一个参数是需被格式化的数|W二个参C表小数点后显C的数位,且应该具有一个默认|q回gؓ一个stringcdQ?br /><br /> <table border="1" bordercolor="#cccccc" width="90%" bgcolor="#e7e9e9" align="center"> <tbody> <tr> <td>string do_fraction(long double value, int decplaces=3);</td></tr></tbody></table><br />  注意Q第二个参数代表的小CC包括了小数点Q因此,两位数需要默认gؓ3?br /><br />  _ֺ问题<br /><br />  当然Q第一步是把long doubleD{换ؓ一个stringQ用标准C++?lt;sstream>直是手到擒来。然而,有一件事情必dh意,因ؓ某些原因Qstringstream对象默认_ֺ?Q而许多程序员错误地把"_ֺ"理解为小数的位数Q这是不正确的,_ֺ应指代全部位数。因而,数字1234.56?a class="infotextkey" target="_blank">安全</a>地通过默认_ֺ6来表C,?2345.67会被截断?2345.6。这L话,如果你有一个非常大的数Q如1234567.8Q它的结果会静悄悄地转换为科学记数法Q?.23457e+06Q这昄不是我们惌的。ؓ避免q样的麻烦,在开始{换之前,应把默认_ֺ设ؓ最大?br />为得到long double能表C的最大位敎ͼ可?lt;limits>库:<br /><br /> <table border="1" bordercolor="#cccccc" width="90%" bgcolor="#e7e9e9" align="center"> <tbody> <tr> <td>string do_fraction(long double value, int decplaces=3)<br />{<br />int prec=numeric_limits<long double>::digits10; // 18<br />ostringstream out;<br />out.precision(prec);//覆盖默认_ֺ<br />out<<value;<br />string str= out.str(); //从流中取出字W串 数值现在存储在str中,{待格式化?/td></tr></tbody></table> <p> </p> <p> </p>  数点的位置<br /><br />  要进行格式化Q首先要定数点的位置Q如果小C多于decplacesQdo_fraction()会删除多余的?br /><br />  要定位小CQ可使用string::find()Q在STL法中用了一个常量来代表"数值未扑ֈ"Q在字符串中Q这个常量ؓstring::nposQ?br /><br /> <table border="1" bordercolor="#cccccc" width="90%" bgcolor="#e7e9e9" align="center"> <tbody> <tr> <td>char DECIMAL_POINT='.'; // Ƨ洲用法?,'<br /><br />size_t n=str.find(DECIMAL_POINT);<br />if ((n!=string::npos)//是否有小数点呢?<br />{<br />//查小数的位数<br />}</td></tr></tbody></table><br />  如果没有数点,函数直接q回字符Ԍ否则Q函数将l箋查小C是否多于decplaces。如果是Q小数部分将会被截断Q?br /><br /> <table border="1" bordercolor="#cccccc" width="90%" bgcolor="#e7e9e9" align="center"> <tbody> <tr> <td>size_t n=str.find(DECIMAL_POINT);<br />if ((n!=string::npos)//有小数点吗?<br />&&(str.size()> n+decplaces)) //后面臛_q有decplaces位吗Q?br /><br />//在小数decplaces位之后写入nul<br />str[n+decplaces]=''; </td></tr></tbody></table><br />  最后一行覆盖了多余的小CQ它使用了常量来截断字符Ԍ要注意,string对象的数据可以包含nul字符Q而字W串的实际长度由size()的返回值决定。因此,你不能假定字W串已被正确地格式化Q换句话来说Q如果在str中原来ؓ"123.4567"Q在插入帔R之后Q它变成?123.457"Qؓ把str~减?123.45"Q一般可使用自交换的ҎQ?str.swap(string(str.c_str()) );//删除nul之后的多余字W?br /><br />  那它的原理是什么呢Q函数string::c_str()q回一个const char *代表此字W串对象Q而这个D用作一个时string对象的初始化|接着Q时对象又被用作str.swap()的参敎ͼswap()会把?123.45"赋给str。一些老一点的~译器不支持默认模板参数Q可能不会让swap()通过~译Q如果是q样的话Q用手工交换来代替Q?br /><br /> <table border="1" bordercolor="#cccccc" width="90%" bgcolor="#e7e9e9" align="center"> <tbody> <tr> <td>string temp=str.c_str();<br />str=temp;</td></tr></tbody></table><br />  代码虽不是很"优美"Q但能达到目的就行。以下是do_fraction()的完整代码:<br /><br /> <table border="1" bordercolor="#cccccc" width="90%" bgcolor="#e7e9e9" align="center"> <tbody> <tr> <td>string do_fraction(long double value, int decplaces=3)<br />{<br /> ostringstream out;<br /> int prec=<br /> numeric_limits<long double>::digits10; // 18<br /><br /> out.precision(prec);//覆盖默认_ֺ<br /> out<<value;<br /> string str= out.str(); //从流中取出字W串<br /> size_t n=str.find(DECIMAL_POINT);<br /> if ((n!=string::npos) //有小数点吗?<br /> && (str.size()> n+decplaces)) //后面臛_q有decplaces位吗Q?br /> {<br />  str[n+decplaces]='';//覆盖W一个多余的?br /> }<br /><br /> str.swap(string(str.c_str()));//删除nul之后的多余字W?br /><br /> return str;<br />}</td></tr></tbody></table><br />  如果不想通过传D回一个string对象Q还可增加一个参敎ͼ把str对象以引用传递:<br /><br /> <table border="1" bordercolor="#cccccc" width="90%" bgcolor="#e7e9e9" align="center"> <tbody> <tr> <td>void do_fraction(long double value, string & str, int decplaces=3);</td></tr></tbody></table><br />  从个人的角度来讲Q还是們֐于让~译器做q样的优化,另外Q用传D回,q可以让你以下面q种方式使用do_fraction()Q?br /><br /> <table border="1" bordercolor="#cccccc" width="90%" bgcolor="#e7e9e9" align="center"> <tbody> <tr> <td>cout << funct(123456789.69999001) << 't' << funct(12.011)<<endl;</td></tr></tbody></table><br />  输出Q?br /><br />  123456789.69 12.01<br />--------------------------------------------------------------------------------------------------------------------------------------------------------------<br />先简单理清一下思\Q?br />1 double以最大精度保存在ss?br />2 通过数Ҏ实际精度是否超q需要的_ֺ<br />3 如果过Q截?br />4 q回字符?br /><br />补充一下,W?步应该加一个四舍五入功能。这个比较简单,按相应的位数+5后再截断好?img src ="http://www.shnenglu.com/zhaoyao91/aggbug/147740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zhaoyao91/" target="_blank">今晚打老虎</a> 2011-05-31 11:38 <a href="http://www.shnenglu.com/zhaoyao91/archive/2011/05/31/147740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cd转换操作W?/title><link>http://www.shnenglu.com/zhaoyao91/archive/2011/04/10/143897.html</link><dc:creator>今晚打老虎</dc:creator><author>今晚打老虎</author><pubDate>Sun, 10 Apr 2011 15:12:00 GMT</pubDate><guid>http://www.shnenglu.com/zhaoyao91/archive/2011/04/10/143897.html</guid><wfw:comment>http://www.shnenglu.com/zhaoyao91/comments/143897.html</wfw:comment><comments>http://www.shnenglu.com/zhaoyao91/archive/2011/04/10/143897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zhaoyao91/comments/commentRss/143897.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zhaoyao91/services/trackbacks/143897.html</trackback:ping><description><![CDATA[  有一cȝD的操作W重载,没有q回cdQ这是cd转换操作W?br>operator typename() <span style="COLOR: #0000ff">const<br></span>{<br>   return ...//...是typenamecd?br>}<br><br>  可以q样来理解。{换构造函数是Z一个其他类型{换到当前cdQ重载类型{换操作符则是Z当前类型{换到其他cd?<br><br>注意二义?br>比如Q? <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Test<br><img id=Codehighlighter1_11_76_Open_Image onclick="this.style.display='none'; Codehighlighter1_11_76_Open_Text.style.display='none'; Codehighlighter1_11_76_Closed_Image.style.display='inline'; Codehighlighter1_11_76_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_11_76_Closed_Image onclick="this.style.display='none'; Codehighlighter1_11_76_Closed_Text.style.display='none'; Codehighlighter1_11_76_Open_Image.style.display='inline'; Codehighlighter1_11_76_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_11_76_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_11_76_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   Test();<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   Test( </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> n );<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   </span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">();<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> value;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main()<br><img id=Codehighlighter1_91_278_Open_Image onclick="this.style.display='none'; Codehighlighter1_91_278_Open_Text.style.display='none'; Codehighlighter1_91_278_Closed_Image.style.display='inline'; Codehighlighter1_91_278_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_91_278_Closed_Image onclick="this.style.display='none'; Codehighlighter1_91_278_Closed_Text.style.display='none'; Codehighlighter1_91_278_Open_Image.style.display='inline'; Codehighlighter1_91_278_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_91_278_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_91_278_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   Test myObject;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   Test yourObject;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> intObject </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">33</span><span style="COLOR: #000000">;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   myObject </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> intObject;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">可以通过</span><span style="COLOR: #008000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">   myObject </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> yourObject </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">不可以通过。编译器不知道该调用(int)yourObject转化为intq是调用Test( int )?转化为Test<br>?/span></div> </span> <img src ="http://www.shnenglu.com/zhaoyao91/aggbug/143897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zhaoyao91/" target="_blank">今晚打老虎</a> 2011-04-10 23:12 <a href="http://www.shnenglu.com/zhaoyao91/archive/2011/04/10/143897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2010实用记http://www.shnenglu.com/zhaoyao91/archive/2011/04/06/143523.html今晚打老虎今晚打老虎Wed, 06 Apr 2011 06:50:00 GMThttp://www.shnenglu.com/zhaoyao91/archive/2011/04/06/143523.htmlhttp://www.shnenglu.com/zhaoyao91/comments/143523.htmlhttp://www.shnenglu.com/zhaoyao91/archive/2011/04/06/143523.html#Feedback0http://www.shnenglu.com/zhaoyao91/comments/commentRss/143523.htmlhttp://www.shnenglu.com/zhaoyao91/services/trackbacks/143523.html1 快捷?br>Ctrl + k + c 注释选中代码
Ctrl + k + u 取消选中代码注释

Ctrl + k + f 格式化选中代码
Ctrl + ←or→ 向左或右Ud一个单?br>Ctrl + w 选择当前单词
(按住Shift可以在移动中选择)

Ctrl + c/x 如果光标在这一行,则复?剪脓整行
Ctrl + + l 删除当前?br>
Ctrl + m + o 所有大U折?br>Ctrl + m + l 所有大U展开

Ctrl + j 感知(写长代码时很好用)


Ctrl + tab 切换zd文g(q可以用Ctrl + F6Q效果有点不一?


今晚打老虎 2011-04-06 14:50 发表评论
]]>
关于二重模板 记1http://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143441.html今晚打老虎今晚打老虎Tue, 05 Apr 2011 05:50:00 GMThttp://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143441.htmlhttp://www.shnenglu.com/zhaoyao91/comments/143441.htmlhttp://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143441.html#Feedback0http://www.shnenglu.com/zhaoyao91/comments/commentRss/143441.htmlhttp://www.shnenglu.com/zhaoyao91/services/trackbacks/143441.html  
  记1是因个话题很可能q有其他记?br>  在模板下定义一个类Q类的方法包括重载的q算W往往可以处理q个cL板对于相同类型参数的特化的对象。但是有时候我们往往希望一个类模板的特化对象的Ҏq可以处理这个类模板其他特化的对象。一U办法是利用cȝ性质定义转换构造函敎ͼconvert constructor Q,但是我们可以使用模板得到一U更通用的方法,那就是在cL板中定义二重模板?br>  定义Ҏ很简单,下面的例子会展示。注意内层模板的参数应该与外层模板不一P而且定义的时候应该用两层template?br>  对于一般的函数和运符Q通常来说Q如果只定义一个二重模板的ҎQ它既可以处理不同类型的特化对象Q也可以处理相同cd的特化对象(即T和C是相同类型)。如果在外层模板中另外定义了一个普通的同名ҎQ以处理相同cd的特化对象)Q那么在处理相同cd的特化对象时Q则会调用这一套方法。这有点像对模板特化q行重蝲Q告诉编译器在特D情况,q里是特化类型相同,应该使用另外一套方法)?br>例如Q?br>如果?行和14~18行注释掉Q那么输出结果均Z?接受不同cd?br>
 1#include <iostream>
 2using namespace std;
 3
 4template < typename T >
 5class A
 6{
 7public:
 8    void function( const A< T > & );
 9
10    template < typename C >
11    void function( const A< C > & );
12}
;
13
14template < typename T >
15void A< T >::function( const A< T > & )
16{
17    cout << "接受相同cd" << endl;
18}

19
20template < typename T >
21template < typename C >
22void A< T >::function( const A< C > & )
23{
24    cout << "接受不相同类?/span>" << endl;
25}

26
27int main()
28{
29    A< int > a;
30    A< int > b;
31    A< double > c;
32
33    a.function( b );
34    a.function( c );
35}

  但是对于复制操作W和拯构造函数来_情况有些不一栗因为编译器会ؓ没有定义的类提供默认Q以及拷贝构造函敎ͼҎ上面的分析,q个默认的东西相当于对二重模板中Ҏ情况的重载,所以如果只有一个二重模板,那么它将不能处理相同cd的类模板特化的对象。而这ӞE序会调用编译器提供的默认=以及拯构造函敎ͼ而这往往是我们不惌的(我们需要自己定制的Q以及拷贝构造函数啊Q。所以这Ӟ我们需要自己定制一套非二重模板的=或者拷贝构造函数来满需求?br>
例如Q?br>如果?行和14~18行注释掉Q那么输出结果只有一?Z同类型调??Q因为另外一句话调用了编译器提供的默?P所以ƈ没有M输出?br>
 1#include <iostream>
 2using namespace std;
 3
 4template < typename T >
 5class B
 6{
 7public:
 8    void operator=const B< T > & );
 9
10    template < typename C >
11    void operator=const B< C > & );
12}
;
13
14template < typename T >
15void B< T >::operator=const B< T > & )
16{
17    cout << "为相同类型调??/span>" << endl;
18}

19
20template < typename T >
21template < typename C >
22void B< T >::operator=const B< C > & )
23{
24    cout << "Z同类型调??/span>" << endl;
25}

26
27int main()
28{
29    B< int > a;
30    B< int > b;
31    B< double > c;
32
33    a = b;
34    a = c;
35}


今晚打老虎 2011-04-05 13:50 发表评论
]]>
模板的声明与实现的分L?/title><link>http://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143423.html</link><dc:creator>今晚打老虎</dc:creator><author>今晚打老虎</author><pubDate>Mon, 04 Apr 2011 18:01:00 GMT</pubDate><guid>http://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143423.html</guid><wfw:comment>http://www.shnenglu.com/zhaoyao91/comments/143423.html</wfw:comment><comments>http://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143423.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/zhaoyao91/comments/commentRss/143423.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zhaoyao91/services/trackbacks/143423.html</trackback:ping><description><![CDATA[<p>  c++标准定义了export来实现模板的声明与实现的分离。很遗憾Q现在很多编译器没有支持Q包括我现在使用的vs2010?br>  有一些其他的Ҏ。这里介l一U?br><br>  首先Q在.h文g中声明模板,q在最后包含相应的cpp文g。然后将实现写在cpp文g中。乍一看很别扭Q仔l一惛_实是合情合理的。不是要求声明和定义在一P且声明出现在定义之前么,q样写,.h文gq合要求了?br><br>cL板声?/p> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">This is MyClass.h</span><span style="COLOR: #008000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">#include </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">template</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000"> typename T </span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> MyClass<br><img id=Codehighlighter1_100_138_Open_Image onclick="this.style.display='none'; Codehighlighter1_100_138_Open_Text.style.display='none'; Codehighlighter1_100_138_Closed_Image.style.display='inline'; Codehighlighter1_100_138_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_100_138_Closed_Image onclick="this.style.display='none'; Codehighlighter1_100_138_Closed_Text.style.display='none'; Codehighlighter1_100_138_Open_Image.style.display='inline'; Codehighlighter1_100_138_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_100_138_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_100_138_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   T function( </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> T </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000"> );<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Myclass.cpp</span><span style="COLOR: #000000">"</span></div> <br>cL板定?br> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">This is MyClass.cpp</span><span style="COLOR: #008000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">template</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000"> typename T </span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">T MyClass< T >::function( </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> T </span><span style="COLOR: #000000">&</span><span style="COLOR: #0000ff">ref</span><span style="COLOR: #000000"> )<br><img id=Codehighlighter1_82_138_Open_Image onclick="this.style.display='none'; Codehighlighter1_82_138_Open_Text.style.display='none'; Codehighlighter1_82_138_Closed_Image.style.display='inline'; Codehighlighter1_82_138_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_82_138_Closed_Image onclick="this.style.display='none'; Codehighlighter1_82_138_Closed_Text.style.display='none'; Codehighlighter1_82_138_Open_Image.style.display='inline'; Codehighlighter1_82_138_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_82_138_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_82_138_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">this is my class</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">ref</span><span style="COLOR: #000000">;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> MyClass</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::function( </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&</span><span style="COLOR: #0000ff">ref</span><span style="COLOR: #000000"> )<br><img id=Codehighlighter1_188_245_Open_Image onclick="this.style.display='none'; Codehighlighter1_188_245_Open_Text.style.display='none'; Codehighlighter1_188_245_Closed_Image.style.display='inline'; Codehighlighter1_188_245_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_188_245_Closed_Image onclick="this.style.display='none'; Codehighlighter1_188_245_Closed_Text.style.display='none'; Codehighlighter1_188_245_Open_Image.style.display='inline'; Codehighlighter1_188_245_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_188_245_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_188_245_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">this is int class</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">   </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">ref</span><span style="COLOR: #000000">;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div> <br>  <br>  q里cpp文g中顺便演CZ一下如何重载特定类型的模板特化? <img src ="http://www.shnenglu.com/zhaoyao91/aggbug/143423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zhaoyao91/" target="_blank">今晚打老虎</a> 2011-04-05 02:01 <a href="http://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多重l承、二义性、虚基类Q虚l承Q之我见http://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143407.html今晚打老虎今晚打老虎Mon, 04 Apr 2011 09:24:00 GMThttp://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143407.htmlhttp://www.shnenglu.com/zhaoyao91/comments/143407.htmlhttp://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143407.html#Feedback0http://www.shnenglu.com/zhaoyao91/comments/commentRss/143407.htmlhttp://www.shnenglu.com/zhaoyao91/services/trackbacks/143407.html  书上只有一个虚基类的概念,卛_l承的时候加上关键字virtual。这里我们姑且把q种l承方式叫做虚ѝ现在先来说一下虚l承和一般承的区别?br>  要解释这一pd问题Q我们首先要搞清楚这一pd概念意味着什么。多重承不用赘q。现在先׃义性和虚承谈谈我的看法?br>
  在一般的l承中(非虚l承Q,每一个派生类都保存了一份完整的基类副本。考虑以下l承Q?
class A
{
   
void print();
}
;

class B : public A
{
   
void print();
}
;

class C : public C
{
   
void print();
}
;

在这样一pdl承体系中,A包含一份print()QB包含了两份,而C则包含了三分prin()。这里d?份独立的print()函数。虽然在C中调用B::print()感觉和B中调用print()效果一P但他们确实是作ؓ两个副本存在。  而在虚承中Q考虑如下l承Q?br>
class A
{
   
void print();
}
;

class B : virtual public A
{
   
void print();
}
;

class C : virtual public C
{
   
void print();
}
;
Q只含有一份print()副本Q但是却可以通过A::print()调用A的print()函数。同理,C也只包含了一份print()副本。这里d只有3分print()副本。虚l承中基cȝ数据q没有变多一份给zc,而只是用权UM了,好像A有一栋楼Q虚l承lBQ名义上Q也拥有了这栋楼Q可以用,但是q没有真正ؓQ另外徏一栋一模一L楹{?br>
  二义性:要解释二义性,最好先定义一个概念:名字间隔。笼l地表达Q一个名字的间隔是某个数据的名字从l承层次中首ơ出现到达最后派生类时中间隔了多相同的名字。间隔越,q个名字的优先񔭑高。当然直接在最l类里面声明的名字具有最高的优先U。比如考虑一开始的普通承:
class A
{
   
void print();
}
;

class B : public A
{
   
void print();
}
;

class C : public C
{
   
void print();
}
;

如果使用Q的对象Q那么A中的pirnt与C间隔最大,C中的print与C的间隔最短,所以如果直接调用C对象的print函数Q那么将调用C版本的print。如果C没有定义一个print函数Q那么B中的print函数与C间隔最,那么调用C对象的print函数Ӟ调用B版本的print函数?br>  有了q个概念Q现在来解释二义性:如果存在两个及其以上的名字距Ll派生类的距L短(长度一PQ那么,Ҏ刚才由名字间隔定义的优先U别Q在直接调用q个zcd象的相应数据Ӟ便不知道该调用哪个版本了Q注意直接两个字Q因为可以通过二元::来分辨具体的版本以调用,所以即使名字存在二义性,如果未调用这些名字,~译器可能不会报错)。有两种情况Q到目前为止我看到的Q可能导致二义性:1、在cM声明了两个名字一L成员Q这是最p糕的情况,因ؓ如果q样做了Q没有办法I补,但这也是最好的情况Q因为编译器Ҏ不会让你q么做?、多l承的时候承了两个间隔一L名字Q通常难以对付的是q种情况?br>  关于上述W二U情况(多承)Q这些具有二义性的名字可能1、来自两个基cd自的声明Q?、也可能来自两个基类l承自更高层ơ的同一基类Q菱形承)Q?、也可能其中一个名字来自基cd明,另一个名字来自另一个基cd更高层次基类的ѝ无论如何,只要同时存在两个及其以上h如果存在两个及其以上的名字距Ll派生类的距L短(长度一PQ那么就存在二义性?br>?br>1、来自两个基cd自声?br>
class B1
{
   
void print();
}
;

class B2 :
{
   
void print();
}
;

class C : public B1, public B2
{
}
;

2、菱形?br>
class A
{
   
void print();
}
;

class B1 : public A
{
}
;

class B2 : public A
{
}
;

class C : public B1, public B2
{
}
;

3、其中一个名字来自基cd明,另一个名字来自另一个基cd更高层次基类的?br>
class A
{
   
void print();
}
;

class B1 : public A
{
}
;

class B2 :
{
   
void print();   
}
;

class C : public B1, public B2
{
}
;
Q注意:虽然A版本的print是通过B1到达C的,但是A->B1->C的过E中QA版本的print与C之间q没有间隔其他的printQ这与B2版本的print一P所以他们具有相同的名字间隔Q因此具有二义性)

  二义性的解决办法Q?br>  1、在最l派生类中定义一个相同名字的成员Q这栯个名字距Ll派生类最q,所以就会调用这个名字下的数据(通常教材里叫做这个名字把其他名字隐藏了)。这个名字(如果是函敎ͼ你可以自己定义新的方法,也可以通过二元::调用你已知的存在二义性的名字中的某一个(注意Q如果你选择的调用版本不是该zcȝ直接基类Q那么该如何调用呢?比如A->B->CQ那么从C的对象c调用A的print函数Qc.A::print()是否可行Q我在vs2010上,虽然报错但是~译通过且正常运行。如果各位有M见解或徏议,希望不吝赐教。)
  2、用虚l承Q针对菱形承等Q:回想一下虚l承和普通承,通过虚承的Ҏ可以消除重复副本带来的二义性问题。比如在某一l承层次上,q个某两个名字具有二义性,然而顺着l承层次向上分析Q却发现q两个名字其实是同一个东西的两个副本Q这个时候如果用虚l承Q那么就使得q两个副本变Z个副本(准确地说Q两个副本都没有了,因ؓ只存在他们公共基cȝ那䆾数据Q虚基类得到的不q是使用权)?br>
写在后面Q?br>  注意虚函数和虚承的区别Q虚函数q没有减Q何数据的存在Q仅仅相当于在基cL针层面上建立了一U?#8220;调用最靠近对象cd的函?#8221;的机制。然而虚l承则是一U类的承方式,卻I只创建派生类Ҏ部分的数据,l承的数据按需从基cȝ取。所以虽然他们都是用virtual关键字,但似乎意思上联系不大?br>  另外Q是用虚l承能够解决的问题相当有限。而且虚扉K临一个开销问题Q虽然从l承层面上看Q这是一个消除二义性的好方法,而且g对编E没有什么副作用。这个道理与虚函数带来的好处与开销权衡问题差不多。一些书希望把这个问题留个程序员自己权衡Q一些书则徏议一律用虚函数。不q应该指出,现在g讑֤能力的提升速度g在不断削弱我们对开销问题的顾忌(只要法上不存在问题Q,所以即使你不打从现在开始就全盘使用虚函C及虚l承Q而且对于一般的程序,即不断加上q些关键字也会人厌烦吧Q况且有些类g一辈子也不会成为基cdQ)Q但是请臛_保持q样一个念_多一U打,多一条\嘛?

今晚打老虎 2011-04-04 17:24 发表评论
]]>
cd例化?默认构造函数调?记http://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143377.html今晚打老虎今晚打老虎Sun, 03 Apr 2011 19:04:00 GMThttp://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143377.htmlhttp://www.shnenglu.com/zhaoyao91/comments/143377.htmlhttp://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143377.html#Feedback0http://www.shnenglu.com/zhaoyao91/comments/commentRss/143377.htmlhttp://www.shnenglu.com/zhaoyao91/services/trackbacks/143377.html 

class A 
{
public:
    A( 
int a = 10 )
    
{
        c 
= a;
    }


    
int c;
}
;

int main()
{
    A t1;
    A t2();
    A 
*p1 = new A;
    A 
*p2 = new A();
}

  四种实例化类的方法(调用默认构造函敎ͼ。其中第二种是错误的Q编译器认ؓ是这样一个函数的声明?

今晚打老虎 2011-04-04 03:04 发表评论
]]>
关于cL板的友元函数http://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143148.html今晚打老虎今晚打老虎Thu, 31 Mar 2011 11:15:00 GMThttp://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143148.htmlhttp://www.shnenglu.com/zhaoyao91/comments/143148.htmlhttp://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143148.html#Feedback0http://www.shnenglu.com/zhaoyao91/comments/commentRss/143148.htmlhttp://www.shnenglu.com/zhaoyao91/services/trackbacks/143148.html  对类建立友元函数很容易。但是迁Ud模板上却Ҏ出现让h怸着头脑的连接错误?br>  层次不够Q不做分析,单纯介绍两种为类模板定义友元函数的方?br>
  Q 闭?/p>
template< typename T >
class MyClass
{
    friend 
void function( MyClass< T > &arg )
    
{
        
    }

}
;
  要点Q友元函数定义在模板体内?br>
       Q 开攑֞
template< typename T >
class MyClass
{
    template
< typename C >
    friend 
void function( MyClass< C > &arg );
}
;

template
< typename C >
void function( MyClass< C > &arg )
{
    
}
  要点Q模板体内要另徏模板?nbsp;
  
  3 告诉~译器声明的设个是模?br>
#include <iostream>
using namespace std;

template 
< typename T >
class A
{
    friend ostream 
&operator<< < T >( ostream &const A< T > & );
}
;

template 
< typename T >
ostream 
&operator<< ( ostream &output, const A< T > &a )
{
    output 
<< "重蝲成功" << endl;
    
return output;
}


int main()
{
    A
< int > a;
    cout 
<< a;
}
要点Q显C地在重载的q算W或者函数后面加上模板声?lt; T >Q?告诉~译器友元函数是一个类型一致的模板?

 Q?br>            如果希望使用函数与模板特化的cd相对应,则用方?Q模板显C声明)
            如果希望使用函数与模板特化的cd相独立,则用方?Q二重模板)
            短的内联函数使用Ҏ1

今晚打老虎 2011-03-31 19:15 发表评论
]]>
关于q算W重载的一些笔?/title><link>http://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143147.html</link><dc:creator>今晚打老虎</dc:creator><author>今晚打老虎</author><pubDate>Thu, 31 Mar 2011 11:07:00 GMT</pubDate><guid>http://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143147.html</guid><wfw:comment>http://www.shnenglu.com/zhaoyao91/comments/143147.html</wfw:comment><comments>http://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zhaoyao91/comments/commentRss/143147.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zhaoyao91/services/trackbacks/143147.html</trackback:ping><description><![CDATA[1.?+= ?+。利?=?中操作副本?br>2.只需要制定一套该cM间的q算W重载和一套该cM其他cd的{换构造函数即可实现该cM其他cd之间的运符重蝲?br>3.+ - * /q回副本<br>  a++ q回延迟副本 <br>  关系q算W返回bool<br><br>  其他D符Q? += ++a{)q回引用Q特别注意:不是帔R引用。发现编译器支持Qa = b Q? c q种语法。说明带=q算W返回ؓ引用。且逻辑上也说得通)<br><br>4. != <br>{<br>      return !( a == b );<br>}<br>5.+ - * /及关p运符不改变对象的|应该加const <br>6.对于+{双向操作符Q应该定义ؓ全局函数以实C换律Q考虑到利?=来简化操作ƈ创徏副本Q可以一个参数接受副本,另一个参数接受常量引用)<br>7.利用<?=_实现其他关系q算W? <img src ="http://www.shnenglu.com/zhaoyao91/aggbug/143147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zhaoyao91/" target="_blank">今晚打老虎</a> 2011-03-31 19:07 <a href="http://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最短的鹦鹉学舌E序http://www.shnenglu.com/zhaoyao91/archive/2011/03/27/142778.html今晚打老虎今晚打老虎Sat, 26 Mar 2011 18:21:00 GMThttp://www.shnenglu.com/zhaoyao91/archive/2011/03/27/142778.htmlhttp://www.shnenglu.com/zhaoyao91/comments/142778.htmlhttp://www.shnenglu.com/zhaoyao91/archive/2011/03/27/142778.html#Feedback0http://www.shnenglu.com/zhaoyao91/comments/commentRss/142778.htmlhttp://www.shnenglu.com/zhaoyao91/services/trackbacks/142778.html  自我感觉是最短的写法了,由此可以引出重要的思想Q直接流操作Q以及流函数rdbuf的相兛_宏V请自行查阅?br>

#include <iostream>
using namespace std;

int main()
{
    cout 
<< cin.rdbuf();
}


今晚打老虎 2011-03-27 02:21 发表评论
]]>
þùɫAVѹۿ| ŷþۺ㽶| պƷþһ| re99þþƷ99| þҹ³˿Ƭϼ | ӰԺ˾þ| þþþŮ˾ƷëƬ| þþþƷһ | ݺɫþۺ| þþƷһ| 99Ʒþþþþþ| þùɫavѿ| Ůþþùһ | ޹Ƶþ| þþƷAVþþ| þAVһ| þþƷһAV| þҹ³Ƭ| þùƷ99þþþþ| ŷ޹Ʒþѿ| þþĻձ| þ߳ˮ| ɫɫݺɫۺϾþ | þۺŷ| ҹƷþӰԺ| ݹƷþþþþ| Ʒ99þþþ91gav| þӰۺ| MM131޹Ůþ| þþƷA㽶| þþƷAVɫ| 99þùۺ| þþ91뾫ƷHD | þù޸ۿ| ŷ龫Ʒþþþþþ | ٸ޾þþþþ| ƷþƷ| ޾þһح | պAvĻþþ޸| þþþAVվ| þ97Ʒþþþþþò|