﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-zhengtao63-随笔分类-C++ 基础</title><link>http://www.cppblog.com/zhengtao63/category/17908.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 12 Oct 2011 16:45:59 GMT</lastBuildDate><pubDate>Wed, 12 Oct 2011 16:45:59 GMT</pubDate><ttl>60</ttl><item><title>C++ 重载类型转换运算符</title><link>http://www.cppblog.com/zhengtao63/archive/2011/10/12/158148.html</link><dc:creator>zhengtao</dc:creator><author>zhengtao</author><pubDate>Wed, 12 Oct 2011 09:54:00 GMT</pubDate><guid>http://www.cppblog.com/zhengtao63/archive/2011/10/12/158148.html</guid><wfw:comment>http://www.cppblog.com/zhengtao63/comments/158148.html</wfw:comment><comments>http://www.cppblog.com/zhengtao63/archive/2011/10/12/158148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhengtao63/comments/commentRss/158148.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhengtao63/services/trackbacks/158148.html</trackback:ping><description><![CDATA[<table style="width: 100%; table-layout: fixed">
<tbody>
<tr>
<td>
<div id="blog_text" class="cnt">
<p><span style="font-size: 10pt"><em>在读《Accelerated c++》时，对" while(cin&gt;&gt;x) " 感到疑惑。 难道 cin 会变为NULL么？不然要死循环了。猜测 io 应该重载了 bool 函数。 特转载这篇博文。</em></span><br /><br />C++的运算符重载功能真的很强大，除了可以重载常规运算符（比如，+ - * / &gt; &lt; = etc. ）也可以重载类型转换运算符（比如, <em><strong>(int)&nbsp;&nbsp;&nbsp;&nbsp; (bool)&nbsp;&nbsp;&nbsp; (char *)</strong> </em>etc. ）,请看下面的例子，类Student重载了运算符 <em><strong>(bool)</strong> .</em></p>
<p>&nbsp;</p>
<p>#include &lt;iostream&gt;<br />using namespace std;</p>
<p>class Student<br />{<br />public:<br />Student(bool _isok = true) : isok(_isok){}<br /><br /><font color="#ff0000">operator bool()<br />{<br />&nbsp;&nbsp; return isok;<br />}<br /></font><br />bool isok;<br /><br />~Student(){}<br />};</p>
<p>int main(int argc, char *argv[])<br />{<br /><br />Student a(true), b(false);<br /><br />cout&lt;&lt;<font color="#ff0000">((bool)a)</font>&lt;&lt;endl;<br />cout&lt;&lt;<font color="#ff0000">((bool)b)</font>&lt;&lt;endl;<br /><br /><font color="#ff0000">if( a )<br /></font>&nbsp;&nbsp; cout&lt;&lt;"a is ok"&lt;&lt;endl;<br /><font color="#ff0000">if( b )<br /></font>&nbsp;&nbsp; cout&lt;&lt;"b is ok"&lt;&lt;endl;<br /><br />return 0;<br />}</p>
<p>运行结果：</p>
<p>1<br />0<br />a is ok</p>
<p>&nbsp;</p>
<p>注意看那两个if语句， 结果中只出现&#8220;a is ok&#8221;，说明if语句条件表达式隐含地进行了类型转换（转换成bool型），这样，我们就能理解，为什么可以写这样的语句：</p>
<p>int n;</p>
<p>if ( cin&gt;&gt;n )</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp; ......</p>
<p>}</p>
<p><u>可以推断，io流类也重载了bool型转换运算符。</u></p></div></td></tr></tbody></table><img src ="http://www.cppblog.com/zhengtao63/aggbug/158148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhengtao63/" target="_blank">zhengtao</a> 2011-10-12 17:54 <a href="http://www.cppblog.com/zhengtao63/archive/2011/10/12/158148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>