??xml version="1.0" encoding="utf-8" standalone="yes"?>韩国av一区二区三区在线观看,9色精品在线,欧美国产另类http://www.shnenglu.com/wolf/category/6280.htmlzh-cnSat, 28 Aug 2010 08:19:22 GMTSat, 28 Aug 2010 08:19:22 GMT60常见设计模式之抽象工厂模?/title><link>http://www.shnenglu.com/wolf/articles/122611.html</link><dc:creator>老狼</dc:creator><author>老狼</author><pubDate>Tue, 24 Aug 2010 16:59:00 GMT</pubDate><guid>http://www.shnenglu.com/wolf/articles/122611.html</guid><wfw:comment>http://www.shnenglu.com/wolf/comments/122611.html</wfw:comment><comments>http://www.shnenglu.com/wolf/articles/122611.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/wolf/comments/commentRss/122611.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wolf/services/trackbacks/122611.html</trackback:ping><description><![CDATA[之前介绍q简单工厂模式、工厂模式,q节介绍下工厂家族的最后一U设计模?-抽象工厂设计模式? <div>实际上,如果对前两种模式熟练掌握的话Q这个相Ҏ(gu)说最复杂的设计模式也不难理解Q它也可以理解ؓ(f)是在工厂模式基础上的升?/div> <div>我们知道Q工厂模式将一个类的实例化延迟到子c,具体产品cȝ具体工厂cL实例化,但这U关pd本是一对一的,也就是说一个抽象工厂类对应一个抽象品类Q多个具体工厂类对应多个具体产品cR归Ux说就是一个工厂族只服务于一个品族?/div> <div>抽象工厂模式实现?jin)工厂类与品类一对多的关p,或者说工厂族与产品族实C(jin)一对多的关pR它们的区别可以用一家工厂来形容Q工厂模式就像是q家工厂的一条生产线Q而抽象工厂模式就好比整个工厂的所有生产线?/div> <div><br></div> <img src ="http://www.shnenglu.com/wolf/aggbug/122611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wolf/" target="_blank">老狼</a> 2010-08-25 00:59 <a href="http://www.shnenglu.com/wolf/articles/122611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式之代理模式(ProxyQ?/title><link>http://www.shnenglu.com/wolf/articles/124599.html</link><dc:creator>老狼</dc:creator><author>老狼</author><pubDate>Tue, 24 Aug 2010 16:37:00 GMT</pubDate><guid>http://www.shnenglu.com/wolf/articles/124599.html</guid><wfw:comment>http://www.shnenglu.com/wolf/comments/124599.html</wfw:comment><comments>http://www.shnenglu.com/wolf/articles/124599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/wolf/comments/commentRss/124599.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wolf/services/trackbacks/124599.html</trackback:ping><description><![CDATA[<p><strong>概念<br></strong>代理q个词对我们来说非常熟?zhn)Q比如上|经怋用的代理服务器,q有销售代理商{。就是客户与目标之间的桥梁?br>设计模式中的代理模式QProxyQ是q样定义的:(x)为其他对象提供一U代理以控制对这个对象的讉K?br>若要为其他对象提供代理服务,那么首先本n也要h与被代理对象同样的方法,那么q样在访问时才能真正起到Q透明Q代理的作用?br>所以代理类一般同被代理类是承于同一个类的兄弟类Q区别就是他是ؓ(f)别h服务的?br><br>q样说来Q表面看代理很风光,啥都得通过他,好像没他不行似的Q其实他是个跑堂的Q?/p> <p><strong><br>l成部分</strong><br>1.抽象主题Q基c,声明?jin)代理对象和真实对象的共同点Q?br>2.真实主题Q真正需要被调用的对象;<br>3.代理对象Q代理真实对象的对象?/p> <p><br><strong>分类<br></strong>1.q程代理Q也是Z个对象在不同的地址I间提供局部代表,q样可以隐藏一个对象存在于不同地址I间的事实。这个不同的地址I间可以是在本机器上Q也可以在另一台机器中?br>2.虚拟代理Q是Ҏ(gu)需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象Q其只有在真正需要时才被创徏?br>3.安全代理Q也叫保护代理,用来控制真实对象讉K时的权限Q如果有必要的话Q可以给不同调用者提供不同的权限?br>4.指引Q是指当调用真实对象Ӟ代理处理另外一些事Q比如记录对此对象的调用ơ数{?br>5.写时拯Q虚拟代理的一U,把复制推q到只有客户的需要时才进行?br>6.~存代理Qؓ(f)某一个目标的操作l果提供临时存储I间Q以便其他客L(fng)可以׃n讉KQ有点缓存的味道?br>7.防火墙代理:(x)保护对象Q不让用戯问,安全代理的特例?br>8.同步代理Q可以让几个用户同时讉K同一个对象而不产生冲突?br>常用的是前四U代理方式?/p> <p><strong>UMLcd<br></strong> <img height=500 alt="" src="http://www.shnenglu.com/images/cppblog_com/wolf/Proxy.jpg" width=660 border=0><br><br><strong>实例代码<br></strong>1QProxy.h<br></p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#ifndef _PROXY_H<br></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> _PROXY_H</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id=Codehighlighter1_35_65_Open_Image onclick="this.style.display='none'; Codehighlighter1_35_65_Open_Text.style.display='none'; Codehighlighter1_35_65_Closed_Image.style.display='inline'; Codehighlighter1_35_65_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_35_65_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_35_65_Closed_Text.style.display='none'; Codehighlighter1_35_65_Open_Image.style.display='inline'; Codehighlighter1_35_65_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_35_65_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_35_65_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">@brief Abstract Base Class.</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080"> 5</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Subject <br></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img id=Codehighlighter1_81_166_Open_Image onclick="this.style.display='none'; Codehighlighter1_81_166_Open_Text.style.display='none'; Codehighlighter1_81_166_Closed_Image.style.display='inline'; Codehighlighter1_81_166_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_81_166_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_81_166_Closed_Text.style.display='none'; Codehighlighter1_81_166_Open_Image.style.display='inline'; Codehighlighter1_81_166_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_81_166_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_81_166_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img id=Codehighlighter1_105_106_Open_Image onclick="this.style.display='none'; Codehighlighter1_105_106_Open_Text.style.display='none'; Codehighlighter1_105_106_Closed_Image.style.display='inline'; Codehighlighter1_105_106_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_105_106_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_105_106_Closed_Text.style.display='none'; Codehighlighter1_105_106_Open_Image.style.display='inline'; Codehighlighter1_105_106_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    Subject() </span><span id=Codehighlighter1_105_106_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_105_106_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img id=Codehighlighter1_131_132_Open_Image onclick="this.style.display='none'; Codehighlighter1_131_132_Open_Text.style.display='none'; Codehighlighter1_131_132_Closed_Image.style.display='inline'; Codehighlighter1_131_132_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_131_132_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_131_132_Closed_Text.style.display='none'; Codehighlighter1_131_132_Open_Image.style.display='inline'; Codehighlighter1_131_132_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Subject() </span><span id=Codehighlighter1_131_132_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_131_132_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> request() </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img id=Codehighlighter1_170_198_Open_Image onclick="this.style.display='none'; Codehighlighter1_170_198_Open_Text.style.display='none'; Codehighlighter1_170_198_Closed_Image.style.display='inline'; Codehighlighter1_170_198_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_170_198_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_170_198_Closed_Text.style.display='none'; Codehighlighter1_170_198_Open_Image.style.display='inline'; Codehighlighter1_170_198_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_170_198_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_170_198_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">@brief Real entity class.</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">14</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> RealSubject: </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Subject <br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id=Codehighlighter1_234_319_Open_Image onclick="this.style.display='none'; Codehighlighter1_234_319_Open_Text.style.display='none'; Codehighlighter1_234_319_Closed_Image.style.display='inline'; Codehighlighter1_234_319_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_234_319_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_234_319_Closed_Text.style.display='none'; Codehighlighter1_234_319_Open_Image.style.display='inline'; Codehighlighter1_234_319_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_234_319_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_234_319_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    RealSubject();<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">RealSubject();<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> request();<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img id=Codehighlighter1_323_404_Open_Image onclick="this.style.display='none'; Codehighlighter1_323_404_Open_Text.style.display='none'; Codehighlighter1_323_404_Closed_Image.style.display='inline'; Codehighlighter1_323_404_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_323_404_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_323_404_Closed_Text.style.display='none'; Codehighlighter1_323_404_Open_Image.style.display='inline'; Codehighlighter1_323_404_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_323_404_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_323_404_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">@brief Proxy class, including a pointer of pointing to the Real-entity class. </span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">23</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Proxy: </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Subject <br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img id=Codehighlighter1_434_549_Open_Image onclick="this.style.display='none'; Codehighlighter1_434_549_Open_Text.style.display='none'; Codehighlighter1_434_549_Closed_Image.style.display='inline'; Codehighlighter1_434_549_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_434_549_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_434_549_Closed_Text.style.display='none'; Codehighlighter1_434_549_Open_Image.style.display='inline'; Codehighlighter1_434_549_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_434_549_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_434_549_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Proxy();<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Proxy();<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> request();<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    RealSubject</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> m_realSubject;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#endif</span></div> <br>2QProxy.cpp<br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Proxy.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>#include </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;<br></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>RealSubject::RealSubject()<br></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img id=Codehighlighter1_89_138_Open_Image onclick="this.style.display='none'; Codehighlighter1_89_138_Open_Text.style.display='none'; Codehighlighter1_89_138_Closed_Image.style.display='inline'; Codehighlighter1_89_138_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_89_138_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_138_Closed_Text.style.display='none'; Codehighlighter1_89_138_Open_Image.style.display='inline'; Codehighlighter1_89_138_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_89_138_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_89_138_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">RealSubject constructor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>RealSubject::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">RealSubject()<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img id=Codehighlighter1_169_217_Open_Image onclick="this.style.display='none'; Codehighlighter1_169_217_Open_Text.style.display='none'; Codehighlighter1_169_217_Closed_Image.style.display='inline'; Codehighlighter1_169_217_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_169_217_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_169_217_Closed_Text.style.display='none'; Codehighlighter1_169_217_Open_Image.style.display='inline'; Codehighlighter1_169_217_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_169_217_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_169_217_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">RealSubject destructor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id=Codehighlighter1_220_259_Open_Image onclick="this.style.display='none'; Codehighlighter1_220_259_Open_Text.style.display='none'; Codehighlighter1_220_259_Closed_Image.style.display='inline'; Codehighlighter1_220_259_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_220_259_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_220_259_Closed_Text.style.display='none'; Codehighlighter1_220_259_Open_Image.style.display='inline'; Codehighlighter1_220_259_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_220_259_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_220_259_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">@brief Real-entity's request method.</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">17</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> RealSubject::request()<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img id=Codehighlighter1_288_333_Open_Image onclick="this.style.display='none'; Codehighlighter1_288_333_Open_Text.style.display='none'; Codehighlighter1_288_333_Closed_Image.style.display='inline'; Codehighlighter1_288_333_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_288_333_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_288_333_Closed_Text.style.display='none'; Codehighlighter1_288_333_Open_Image.style.display='inline'; Codehighlighter1_288_333_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_288_333_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_288_333_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">RealSubject request</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>Proxy::Proxy(): m_realSubject(NULL)<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img id=Codehighlighter1_372_415_Open_Image onclick="this.style.display='none'; Codehighlighter1_372_415_Open_Text.style.display='none'; Codehighlighter1_372_415_Closed_Image.style.display='inline'; Codehighlighter1_372_415_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_372_415_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_372_415_Closed_Text.style.display='none'; Codehighlighter1_372_415_Open_Image.style.display='inline'; Codehighlighter1_372_415_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_372_415_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_372_415_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Proxy constructor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>Proxy::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Proxy()<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img id=Codehighlighter1_434_528_Open_Image onclick="this.style.display='none'; Codehighlighter1_434_528_Open_Text.style.display='none'; Codehighlighter1_434_528_Closed_Image.style.display='inline'; Codehighlighter1_434_528_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_434_528_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_434_528_Closed_Text.style.display='none'; Codehighlighter1_434_528_Open_Image.style.display='inline'; Codehighlighter1_434_528_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_434_528_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_434_528_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Proxy destructor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    delete m_realSubject;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    m_realSubject </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img id=Codehighlighter1_531_564_Open_Image onclick="this.style.display='none'; Codehighlighter1_531_564_Open_Text.style.display='none'; Codehighlighter1_531_564_Closed_Image.style.display='inline'; Codehighlighter1_531_564_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_531_564_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_531_564_Closed_Text.style.display='none'; Codehighlighter1_531_564_Open_Image.style.display='inline'; Codehighlighter1_531_564_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_531_564_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_531_564_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">@brief Proxy's request method.</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">35</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> Proxy::request()<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img id=Codehighlighter1_587_776_Open_Image onclick="this.style.display='none'; Codehighlighter1_587_776_Open_Text.style.display='none'; Codehighlighter1_587_776_Closed_Image.style.display='inline'; Codehighlighter1_587_776_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_587_776_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_587_776_Closed_Text.style.display='none'; Codehighlighter1_587_776_Open_Image.style.display='inline'; Codehighlighter1_587_776_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_587_776_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_587_776_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Proxy request</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img id=Codehighlighter1_631_669_Open_Image onclick="this.style.display='none'; Codehighlighter1_631_669_Open_Text.style.display='none'; Codehighlighter1_631_669_Closed_Image.style.display='inline'; Codehighlighter1_631_669_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_631_669_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_631_669_Closed_Text.style.display='none'; Codehighlighter1_631_669_Open_Image.style.display='inline'; Codehighlighter1_631_669_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_631_669_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_631_669_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">@brief Construct it when necessary.</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">40</span><img id=Codehighlighter1_694_743_Open_Image onclick="this.style.display='none'; Codehighlighter1_694_743_Open_Text.style.display='none'; Codehighlighter1_694_743_Closed_Image.style.display='inline'; Codehighlighter1_694_743_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_694_743_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_694_743_Closed_Text.style.display='none'; Codehighlighter1_694_743_Open_Image.style.display='inline'; Codehighlighter1_694_743_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">m_realSubject) </span><span id=Codehighlighter1_694_743_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_694_743_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        m_realSubject </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> RealSubject();<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    m_realSubject</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">request();<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div> <br>3QMain.cpp<br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Proxy.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>#include </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;<br></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main()<br></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img id=Codehighlighter1_73_183_Open_Image onclick="this.style.display='none'; Codehighlighter1_73_183_Open_Text.style.display='none'; Codehighlighter1_73_183_Closed_Image.style.display='inline'; Codehighlighter1_73_183_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_73_183_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_73_183_Closed_Text.style.display='none'; Codehighlighter1_73_183_Open_Image.style.display='inline'; Codehighlighter1_73_183_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_73_183_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_73_183_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Subject</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> proxy </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Proxy();<br></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    proxy</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">request();<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    delete proxy;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    proxy </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div> <br> <img src ="http://www.shnenglu.com/wolf/aggbug/124599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wolf/" target="_blank">老狼</a> 2010-08-25 00:37 <a href="http://www.shnenglu.com/wolf/articles/124599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式之工厂模式(F(tun)actory MethodQ?/title><link>http://www.shnenglu.com/wolf/articles/122610.html</link><dc:creator>老狼</dc:creator><author>老狼</author><pubDate>Mon, 09 Aug 2010 16:30:00 GMT</pubDate><guid>http://www.shnenglu.com/wolf/articles/122610.html</guid><wfw:comment>http://www.shnenglu.com/wolf/comments/122610.html</wfw:comment><comments>http://www.shnenglu.com/wolf/articles/122610.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/wolf/comments/commentRss/122610.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wolf/services/trackbacks/122610.html</trackback:ping><description><![CDATA[<p>前面已经介绍q简单工厂模式,q提?qing)虽然简单工厂模式有很多优点Q但其破坏了(jin)开?闭原则QOpen-Close PrincipleQ对扩展开发,对修改关闭)(j)。即每增加一U算法,都要对工厂类q行修改?br>在这里将单工厂模式稍作改q,既成?jin)工厂方法模式?br>定义一个用于创建对象的接口Q让子类军_实例化哪一个类Q工厂方法得一个类的实例化延迟到其子类?/p> UMLcdQ?br><img height=546 alt="" src="http://www.shnenglu.com/images/cppblog_com/wolf/FMethod.jpg" width=1023 border=0>  <img src ="http://www.shnenglu.com/wolf/aggbug/122610.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wolf/" target="_blank">老狼</a> 2010-08-10 00:30 <a href="http://www.shnenglu.com/wolf/articles/122610.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式之简单工厂模式(Static Factory MethodQ?/title><link>http://www.shnenglu.com/wolf/articles/122609.html</link><dc:creator>老狼</dc:creator><author>老狼</author><pubDate>Mon, 09 Aug 2010 13:34:00 GMT</pubDate><guid>http://www.shnenglu.com/wolf/articles/122609.html</guid><wfw:comment>http://www.shnenglu.com/wolf/comments/122609.html</wfw:comment><comments>http://www.shnenglu.com/wolf/articles/122609.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/wolf/comments/commentRss/122609.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wolf/services/trackbacks/122609.html</trackback:ping><description><![CDATA[<p>单工厂模式又被称为静(rn)态工厂模式。简单工厂模式是׃个工厂对象决定创建出哪一U品类的实例。简单工厂模式是工厂模式家族中最单实用的模式Q可以理解ؓ(f)是不同工厂模式的一个特D实现?/p> <br>UMLcdQ?br><img height=500 alt="" src="http://www.shnenglu.com/images/cppblog_com/wolf/StaticFactory.jpg" width=660 border=0> <br>cd中只列出主要Ҏ(gu)Q而只有工厂类中给Z(jin)构造和析构函数Qƈ且都是私有。目的是q个工厂cȝ作用只是“Z?#8221;Q自׃需要实例化Q所以将构造和析构声明为私有(q个只适用?#8220;?#8221;工厂模式Q?br>代码Qؓ(f)减小幅Q代码只实现部分QƈcodeC个cpp文g中)(j)Q?br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;<br></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img id=Codehighlighter1_43_75_Open_Image onclick="this.style.display='none'; Codehighlighter1_43_75_Open_Text.style.display='none'; Codehighlighter1_43_75_Closed_Image.style.display='inline'; Codehighlighter1_43_75_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_43_75_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_43_75_Closed_Text.style.display='none'; Codehighlighter1_43_75_Open_Image.style.display='inline'; Codehighlighter1_43_75_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_43_75_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_43_75_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> @brief Base operation class.</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080"> 6</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Operation<br></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img id=Codehighlighter1_92_374_Open_Image onclick="this.style.display='none'; Codehighlighter1_92_374_Open_Text.style.display='none'; Codehighlighter1_92_374_Closed_Image.style.display='inline'; Codehighlighter1_92_374_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_92_374_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_92_374_Closed_Text.style.display='none'; Codehighlighter1_92_374_Open_Image.style.display='inline'; Codehighlighter1_92_374_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_92_374_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_92_374_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> m_numA;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> m_numB;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    <br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img id=Codehighlighter1_198_253_Open_Image onclick="this.style.display='none'; Codehighlighter1_198_253_Open_Text.style.display='none'; Codehighlighter1_198_253_Closed_Image.style.display='inline'; Codehighlighter1_198_253_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_198_253_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_198_253_Closed_Text.style.display='none'; Codehighlighter1_198_253_Open_Image.style.display='inline'; Codehighlighter1_198_253_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    Operation(): m_numA(</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">), m_numB(</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">) </span><span id=Codehighlighter1_198_253_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_198_253_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Operation constructor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img id=Codehighlighter1_281_335_Open_Image onclick="this.style.display='none'; Codehighlighter1_281_335_Open_Text.style.display='none'; Codehighlighter1_281_335_Closed_Image.style.display='inline'; Codehighlighter1_281_335_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_281_335_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_281_335_Closed_Text.style.display='none'; Codehighlighter1_281_335_Open_Image.style.display='inline'; Codehighlighter1_281_335_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Operation() </span><span id=Codehighlighter1_281_335_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_281_335_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Operation destructor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> getResult() </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img id=Codehighlighter1_378_427_Open_Image onclick="this.style.display='none'; Codehighlighter1_378_427_Open_Text.style.display='none'; Codehighlighter1_378_427_Closed_Image.style.display='inline'; Codehighlighter1_378_427_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_378_427_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_378_427_Closed_Text.style.display='none'; Codehighlighter1_378_427_Open_Image.style.display='inline'; Codehighlighter1_378_427_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_378_427_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_378_427_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> @brief The class implement the add operation.</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">25</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> OperAdd: </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Operation<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img id=Codehighlighter1_460_733_Open_Image onclick="this.style.display='none'; Codehighlighter1_460_733_Open_Text.style.display='none'; Codehighlighter1_460_733_Closed_Image.style.display='inline'; Codehighlighter1_460_733_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_460_733_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_460_733_Closed_Text.style.display='none'; Codehighlighter1_460_733_Open_Image.style.display='inline'; Codehighlighter1_460_733_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_460_733_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_460_733_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img id=Codehighlighter1_502_595_Open_Image onclick="this.style.display='none'; Codehighlighter1_502_595_Open_Text.style.display='none'; Codehighlighter1_502_595_Closed_Image.style.display='inline'; Codehighlighter1_502_595_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_502_595_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_502_595_Closed_Text.style.display='none'; Codehighlighter1_502_595_Open_Image.style.display='inline'; Codehighlighter1_502_595_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    OperAdd(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> a, </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> b) </span><span id=Codehighlighter1_502_595_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_502_595_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">OperAdd constructor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        m_numA </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> a;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        m_numB </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> b;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img id=Codehighlighter1_613_665_Open_Image onclick="this.style.display='none'; Codehighlighter1_613_665_Open_Text.style.display='none'; Codehighlighter1_613_665_Closed_Image.style.display='inline'; Codehighlighter1_613_665_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_613_665_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_613_665_Closed_Text.style.display='none'; Codehighlighter1_613_665_Open_Image.style.display='inline'; Codehighlighter1_613_665_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">OperAdd() </span><span id=Codehighlighter1_613_665_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_613_665_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">OperAdd destructor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img id=Codehighlighter1_691_731_Open_Image onclick="this.style.display='none'; Codehighlighter1_691_731_Open_Text.style.display='none'; Codehighlighter1_691_731_Closed_Image.style.display='inline'; Codehighlighter1_691_731_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_691_731_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_691_731_Closed_Text.style.display='none'; Codehighlighter1_691_731_Open_Image.style.display='inline'; Codehighlighter1_691_731_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> getResult() </span><span id=Codehighlighter1_691_731_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_691_731_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> (m_numA </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> m_numB);<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img id=Codehighlighter1_737_796_Open_Image onclick="this.style.display='none'; Codehighlighter1_737_796_Open_Text.style.display='none'; Codehighlighter1_737_796_Closed_Image.style.display='inline'; Codehighlighter1_737_796_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_737_796_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_737_796_Closed_Text.style.display='none'; Codehighlighter1_737_796_Open_Image.style.display='inline'; Codehighlighter1_737_796_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_737_796_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_737_796_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> @brief The class OperSub, OperMul and OperDiv omitted. </span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">44</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> OperFactory<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img id=Codehighlighter1_816_997_Open_Image onclick="this.style.display='none'; Codehighlighter1_816_997_Open_Text.style.display='none'; Codehighlighter1_816_997_Closed_Image.style.display='inline'; Codehighlighter1_816_997_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_816_997_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_816_997_Closed_Text.style.display='none'; Codehighlighter1_816_997_Open_Image.style.display='inline'; Codehighlighter1_816_997_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_816_997_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_816_997_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img id=Codehighlighter1_845_918_Open_Image onclick="this.style.display='none'; Codehighlighter1_845_918_Open_Text.style.display='none'; Codehighlighter1_845_918_Closed_Image.style.display='inline'; Codehighlighter1_845_918_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_845_918_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_845_918_Closed_Text.style.display='none'; Codehighlighter1_845_918_Open_Image.style.display='inline'; Codehighlighter1_845_918_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span style="COLOR: #0000ff">enum</span><span style="COLOR: #000000"> OPER_TYPE </span><span id=Codehighlighter1_845_918_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_845_918_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        ADD </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        SUB </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        MUL </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        DIV </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">4</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Operation</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> createOperation(OPER_TYPE oper, </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> a, </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> b);<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>Operation</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> OperFactory::createOperation(OPER_TYPE oper, </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> a, </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> b) <br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img id=Codehighlighter1_1078_1247_Open_Image onclick="this.style.display='none'; Codehighlighter1_1078_1247_Open_Text.style.display='none'; Codehighlighter1_1078_1247_Closed_Image.style.display='inline'; Codehighlighter1_1078_1247_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1078_1247_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1078_1247_Closed_Text.style.display='none'; Codehighlighter1_1078_1247_Open_Image.style.display='inline'; Codehighlighter1_1078_1247_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1078_1247_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_1078_1247_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Operation</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pOper </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL;<br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img id=Codehighlighter1_1128_1226_Open_Image onclick="this.style.display='none'; Codehighlighter1_1128_1226_Open_Text.style.display='none'; Codehighlighter1_1128_1226_Closed_Image.style.display='inline'; Codehighlighter1_1128_1226_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1128_1226_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1128_1226_Closed_Text.style.display='none'; Codehighlighter1_1128_1226_Open_Image.style.display='inline'; Codehighlighter1_1128_1226_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000"> (oper) </span><span id=Codehighlighter1_1128_1226_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_1128_1226_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> ADD:<br></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        pOper </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> OperAdd(a, b);<br></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> pOper;<br></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">73</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main()<br></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img id=Codehighlighter1_1261_1472_Open_Image onclick="this.style.display='none'; Codehighlighter1_1261_1472_Open_Text.style.display='none'; Codehighlighter1_1261_1472_Closed_Image.style.display='inline'; Codehighlighter1_1261_1472_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1261_1472_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1261_1472_Closed_Text.style.display='none'; Codehighlighter1_1261_1472_Open_Image.style.display='inline'; Codehighlighter1_1261_1472_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1261_1472_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_1261_1472_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">75</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Operation</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pOper </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> OperFactory::createOperation(OperFactory::ADD, </span><span style="COLOR: #000000">2.1</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">3.3</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">76</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">77</span><span style="COLOR: #000000"><img id=Codehighlighter1_1360_1455_Open_Image onclick="this.style.display='none'; Codehighlighter1_1360_1455_Open_Text.style.display='none'; Codehighlighter1_1360_1455_Closed_Image.style.display='inline'; Codehighlighter1_1360_1455_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1360_1455_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1360_1455_Closed_Text.style.display='none'; Codehighlighter1_1360_1455_Open_Image.style.display='inline'; Codehighlighter1_1360_1455_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (pOper) </span><span id=Codehighlighter1_1360_1455_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_1360_1455_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">78</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> pOper</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">getResult() </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000"> endl;<br></span><span style="COLOR: #008080">79</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">80</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        delete pOper;<br></span><span style="COLOR: #008080">81</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        pOper </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL;<br></span><span style="COLOR: #008080">82</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">83</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">84</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">85</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div> <br>单工厂模式的最大优点在于工厂类中包含了(jin)必要的逻辑判断Q根据客L(fng)的选择条g动态实例化相关的类Q对于客L(fng)来说Q去除了(jin)与具体品的依赖。但单工厂模式的工厂cL开攄Q如果要增加其它产品Q则要修改工厂类Q这一点违背开?闭原则QOpen-Close PrincipleQ对扩展开发,对修改关闭)(j)。而要克服q一~点Q则要用工厂方法模式(F(tun)actory MethodQ,q种l过改进工厂模式在下一节介l? <img src ="http://www.shnenglu.com/wolf/aggbug/122609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wolf/" target="_blank">老狼</a> 2010-08-09 21:34 <a href="http://www.shnenglu.com/wolf/articles/122609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式之模板方法模式(Template MethodQ?/title><link>http://www.shnenglu.com/wolf/articles/122607.html</link><dc:creator>老狼</dc:creator><author>老狼</author><pubDate>Mon, 09 Aug 2010 10:09:00 GMT</pubDate><guid>http://www.shnenglu.com/wolf/articles/122607.html</guid><wfw:comment>http://www.shnenglu.com/wolf/comments/122607.html</wfw:comment><comments>http://www.shnenglu.com/wolf/articles/122607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/wolf/comments/commentRss/122607.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wolf/services/trackbacks/122607.html</trackback:ping><description><![CDATA[     摘要: 模板Ҏ(gu)模式是一U很单但却很常见的设计模式,它常常在不知不觉中被使用。概念:(x)定义一个操作中的算法的骨架Q而将具体的执行步骤gq到子类中。模板方法得子cd以不改变法的结构而只是重新定义算法的步骤Q得不同步骤生不同的效果。说的更单点Q就是执行的框架由基cL定,而框架中的方法及(qing)执行序由子cL重定义。UMLcdQ?nbsp;上图的代码很好实玎ͼ是基类的模板函C调用?jin)operation1?..  <a href='http://www.shnenglu.com/wolf/articles/122607.html'>阅读全文</a><img src ="http://www.shnenglu.com/wolf/aggbug/122607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wolf/" target="_blank">老狼</a> 2010-08-09 18:09 <a href="http://www.shnenglu.com/wolf/articles/122607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见设计模式之单件类QSingletonQ?/title><link>http://www.shnenglu.com/wolf/articles/120840.html</link><dc:creator>老狼</dc:creator><author>老狼</author><pubDate>Mon, 19 Jul 2010 15:39:00 GMT</pubDate><guid>http://www.shnenglu.com/wolf/articles/120840.html</guid><wfw:comment>http://www.shnenglu.com/wolf/comments/120840.html</wfw:comment><comments>http://www.shnenglu.com/wolf/articles/120840.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/wolf/comments/commentRss/120840.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wolf/services/trackbacks/120840.html</trackback:ping><description><![CDATA[     摘要: 所谓的单gcd是保证一个类仅有一个实例,q提供一个访问它的全局讉K炏V?nbsp; Singleton可以看作是一U经q改q的全局变量Q既在一个进E中只能有唯一的实例,不允生第二个q样的对象?虽然单gcL最单的设计模式Q但仍需心(j)使用Q主要需注意Q?1.构造函?既然是只能有一个实例,那么构造函数自然不能被外部随意调用Q所以需要将其声明ؓ(f)U有QprivateQ,包括默认构造、拷...  <a href='http://www.shnenglu.com/wolf/articles/120840.html'>阅读全文</a><img src ="http://www.shnenglu.com/wolf/aggbug/120840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wolf/" target="_blank">老狼</a> 2010-07-19 23:39 <a href="http://www.shnenglu.com/wolf/articles/120840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C和C++之间库的互相调用http://www.shnenglu.com/wolf/articles/77828.html老狼老狼Wed, 25 Mar 2009 06:34:00 GMThttp://www.shnenglu.com/wolf/articles/77828.htmlhttp://www.shnenglu.com/wolf/comments/77828.htmlhttp://www.shnenglu.com/wolf/articles/77828.html#Feedback0http://www.shnenglu.com/wolf/comments/commentRss/77828.htmlhttp://www.shnenglu.com/wolf/services/trackbacks/77828.html昨晚有个朋友问我关于在C中调用C++库的问题Q今天午饭后Q由于脖子痛的厉完没有加入到我们l的“每天一?#8221;的行列中去,所以正好将C和C++之间的库调用关系做个ȝ?/p>

1.extern "C"的理解:(x)
很多?C"表示的C语言Q实际ƈ非如此,"C"表示的是一U链接约定,只是因C和C++语言之间的密切关p而在它们之间更多的应用而已。实际上Fortran和汇~语a也常怋用,因ؓ(f)它们也正好符合C实现的约定?br>extern "C"指o(h)描述的是一U链接约定,它ƈ不媄(jing)响调用函数的定义Q即时做?jin)该声明Q对函数cd的检查和参数转换仍要遵@C++的标准,而不是C?/p>

2.extern "C"的作用:(x)
不同的语a链接性是不同的,那么也决定了(jin)它们~译后的链接W号的不同,比如一个函数void fun(double d)QC语言?x)把它编译成cM_funq样的符PC链接器只要找到该函数W号可以链接成功,它假讑֏数类型信息是正确的。而C++?x)把q个函数~译成类似_fun_double或_xxx_funDxxxq样的符P在符号上增加?jin)类型信息,q也是C++可以实现重蝲的原因?br>那么Q对于用C~译器编译成的库Q用C++直接链接势必?x)出C能识别符L(fng)问题Q是的,需要extern "C"的时L?jin),它就是干q个用的。extern "C" 的作用就是让~译器知道要以C语言的方式编译和q接装函数?/p>

3.在C++中调用C库的例子Q?br>1).做一个C动态库Q?br>

// hello.c:

#include 
<stdio.h>

void hello()
{
  printf(
"hello\n");
}

 

~译qcopy到系l库目录?也可以自己定义库目录Qman ldconfig):
[root@coredump test]# gcc --shared -o libhello.so hello.c
[root@coredump test]# cp libhello.so /lib/
2).写个C++E序去调用它Q?br>

// test.cpp

#include 
<iostream>

#ifdef __cplusplus
extern "C" {               // 告诉~译器下列代码要以C链接U定的模式进行链?/span>
#endif

void hello();

#ifdef __cplusplus
}
#endif

int main()
{
  hello();

  
return 0;
}


~译q运行:(x)
[root@coredump test]# g++ test.cpp -o test -lhello
[root@coredump test]# ./test
hello
[root@coredump test]#
3).__cplusplus宏的条g~译Q?br>Z么要加这个条件编译呢Q小沈阳有话Q小妹,q是Z么呢Q?br>因ؓ(f)q种技术也可能?x)用在由C头文件生出的C++文g中,q样使用是ؓ(f)?jin)徏立v公共的C和C++文gQ也是保证当这个文件被用做C文g~译Ӟ可以LC++l构Q也是_(d)extern "C"语法在C~译环境下是不允许的?br>比如Q将上面的test.cpp更名为test.cQ将头文件改为stdio.hQ将条g~译LQ再用gcc~译可以看到效果。而即使做?jin)上面的修改Q如果用g++~译可以正怋用,q就是我上面说的“公共的C和C++文g”的意思?/p>

4.C调用C++库:(x)
C++调用C库看上去也不是那么困难,因ؓ(f)C++本n有向前(向C)兼容的特性,再加上纯天然的extern "C"U定Q得一切都是那么自然。而让C调用C++的库g没那么Ҏ(gu)Q不q也不是不可以的?br>说到q里我得休息一下,大中午的Q出L根烟先,不过我也怿如果你不知道{案Q看到这里的时候肯定在到处找板砖,恨不得敲开我的脑壳子。我能理解,我也?fn)惯了(jin),我有个学姐一看到我第一反应是扔出一块砖头先Q?br>a归正传,q是要借助q纯天然的extern "C"?/p>

1)做一个C++库:(x)

// world.cpp

#include 
<iostream>

void world()
{
  std::cout 
<< "world" << std::endl;
}


~译qcopy到系l库目录?
[root@coredump test]# g++ --shared -o libworld.so world.cpp
[root@coredump test]# cp libworld.so /lib/
2)做一个中间接口库Q对C++库进行二ơ封装:(x)

// mid.cpp

#include 
<iostream>

void world();

#ifdef __cplusplus
extern "C" {  // 即ɘq是一个C++E序Q下列这个函数的实现也要以CU定的风格来搞!
#endif

  
void m_world()
  {
    world();
  }

#ifdef __cplusplus
}
#endif


其中Ҏ(gu)m_world即ؓ(f)libworld库中worldҎ(gu)的二ơ封装,~译qcopy到系l库目录?
[root@coredump test]# g++ --shared -o libmid.so mid.cpp -lworld
[root@coredump test]# cp libmid.so /lib/
3).CE序通过链接二次接口库去调用C++库:(x)

// test.c

#include 
<stdio.h>

int main()
{
  m_world();

  
return 0;
}


~译q运行:(x)
[root@coredump test]# gcc test.c -l mid -o test
[root@coredump test]# ./test
world
[root@coredump test]#
注:(x)如果对于C++库中含有cȝQ可以在二次接口函数中生成(f)时对象来调用对应的功能函敎ͼ当然要根据实际情冉|定了(jin)?/p>

5.靠,q了(jin)午休旉?jin),收工Q?/p>

老狼 2009-03-25 14:34 发表评论
]]>
linux中的动态库和静(rn)态库http://www.shnenglu.com/wolf/articles/74928.html老狼老狼Wed, 25 Feb 2009 15:10:00 GMThttp://www.shnenglu.com/wolf/articles/74928.htmlhttp://www.shnenglu.com/wolf/comments/74928.htmlhttp://www.shnenglu.com/wolf/articles/74928.html#Feedback1http://www.shnenglu.com/wolf/comments/commentRss/74928.htmlhttp://www.shnenglu.com/wolf/services/trackbacks/74928.html
1.概念和区别:(x)
    ?rn)态库是在编译过E中一些目标文件的集合。静(rn)态库在程序链接的时候用,链接器会(x)程序中使用到函数的代码从库文g中拷贝到应用E序中。一旦链接完成,在执行程序的时候就不需要静(rn)态库?jin)?
    ׃每个使用?rn)态库的应用程序都需要拷贝所用函数的代码Q所以静(rn)态链接的文g?x)比较大?/p>

    相对于静(rn)态函数库Q动态函数库在编译的时候ƈ没有被编译进目标代码中,而只是作些标记。然后在E序开始启动运行的时候,动态地加蝲所需模块Q因此动态函数库所产生的可执行文g比较?yu)。由于函数库没有被整合进你的E序Q而是E序q行时动态的甌q调用,所以程序的q行环境中必L供相应的库。动态函数库的改变ƈ不媄(jing)响你的程序,所以动态函数库的升U比较方ѝ?/p>

2.命名Q?br>    ?rn)态库的名字一般ؓ(f)libxxxx.aQ其中xxxx是该lib的名U?br>    动态库的名字一般ؓ(f)libxxxx.so.major.minorQxxxx是该lib的名Uͼmajor是主版本Pminor是副版本受版本号也可以没有,一般都?x)徏立个没有版本L(fng)软连接文仉接到全名的库文g?/p>

3.创徏Q?br>无论?rn)态库q是动态库Q创建都分ؓ(f)两步Q第一步创建目标文ӞW二步生产库?br>1).?rn)态库的创建:(x)
#gcc -c test.c -o test.o
#ar rcs libtest.a test.o
名字为libtest.a的静(rn)态库q产了(jin)Q其中选项Q?br>r 表明模块加入到?rn)态库中;
c 表示创徏?rn)态库Q?br>s 表示生索引Q?br>q有更多选项像增加、删除库中的目标文gQ包括将?rn)态库解包{可以通过man来获得?br>2).动态库的创建:(x)
#gcc -fPIC -c test.c -o test.c
#gcc --share test.o -o libtest.so
-fPIC Z(jin)跨^?/p>

4.使用Q?br>~译链接目标E序的方法是一L(fng)Q?br>#gcc main.c -L. -ltest -o main
-L.指定现在本目录下搜烦(ch)库,如果没有Q会(x)到系l默认的目录下搜索,一般ؓ(f)/lib?usr/lib下?br>对于?rn)态库Q这个步骤之后就可以libtest.a库删掉,因ؓ(f)它已l被~译q了(jin)目标E序Q不再需要它?jin)?br>而对于动态库Qlibtest.so库只是在目标E序里做?jin)标讎ͼ在运行程序时才?x)动态加载,那么从哪加蝲呢?加蝲目录?x)?etc/ld.so.conf来指定,一般默认是/lib?usr/libQ所以要惌动态库利加蝲Q你可以库文gcopyC面的两个目录下,或者设|export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/XXX/YYYQ后面ؓ(f)你自己动态库的目录,再或者修?etc/ld.so.conf文gQ把库所在的路径加到文g末尾Qƈ执行ldconfigh。这P加入的目录下的所有库文g都可见?/p>

另外q有个文仉要了(jin)?etc/ld.so.cacheQ里面保存了(jin)常用的动态函数库Q且?x)先把他们加载到内存中,因?f)内存的访问速度q远大于盘的访问速度Q这样可以提高Y件加载动态函数库的速度?jin)?/p>

最后提一点,当同一目录下既有动态库又有?rn)态库Qƈ且两个库的名字相同时Q编译时?x)如何链接呢Q?/p>

gcc~译旉认都是动态链接,如果要指定优先链接静(rn)态库Q需要指定参数static?/p>

 



老狼 2009-02-25 23:10 发表评论
]]>
C++的强制类型{?/title><link>http://www.shnenglu.com/wolf/articles/71835.html</link><dc:creator>老狼</dc:creator><author>老狼</author><pubDate>Mon, 12 Jan 2009 15:22:00 GMT</pubDate><guid>http://www.shnenglu.com/wolf/articles/71835.html</guid><wfw:comment>http://www.shnenglu.com/wolf/comments/71835.html</wfw:comment><comments>http://www.shnenglu.com/wolf/articles/71835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/wolf/comments/commentRss/71835.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wolf/services/trackbacks/71835.html</trackback:ping><description><![CDATA[ <p>在C++中,除了(jin)支持C语言中的隐式cd转换外,同时引入?jin)四U显C的cd转换函数Q以切的标识出正在q行的{换类型?br>函数原型为(均ؓ(f)模板函数Q:(x)<br>static_cast<new_type>(expression)<br>const_cast<new_type>(expression)<br>reinterpret_cast<new_type>(expression)<br>dynamic_cast<new_type>(expression)</p> <p>前三个是在编译时期进行类型{换的Q而最后一个则是在q行时期q行转换的,即dynamic_cast函数需要RTTI的支持,如果是VC下,需要手动打开RTTI支持选项?/p> <p>static_cast主要完成相关cd之间的{换,比如整型到枚举、整型到点{。但static_cast不能转换掉expression的const、volitale、或者__unaligned属?/p> <p>const_cast一般用于强制消除对象的帔R性,它是唯一能做到这一点的 C++ 风格的强制{型,但需注意的是只能转换指针或引用类型,而不能{换普通常量类型?br>如:(x)<br>const int a = 1;<br>int b = const_cast <int>(a);<br>是错误的?/p> <p>reinterpret_cast用于字节数相同的cd之间的{换,常用的就是整型和指针之间、函数指针类型之间进行{换。操作符仅仅重新解释?jin)对象的比特模型而没有进行二q制转换Q需谨慎使用Q一般只在把cd映射回原有类型时使用?/p> <p>dynamic_cast主要用于cdơ间的上行{换和下行转换Q还可以用于cM间的交叉转换?br>在类层次间进行上行{换时Qdynamic_cast和static_cast的效果是一L(fng)Q?br>在进行下行{换时Qdynamic_casthcd(g)查的功能Q比static_cast更安全?br>你能用dynamic_cast把指向基cȝ指针或引用{换成指向其派生类或其兄弟cȝ指针或引用,而且你能知道转换是否成功。失败的转换返回空指针Q当Ҏ(gu)针进行类型{换时Q或者抛出异常(当对引用q行cd转换Ӟ(j)?br></p><img src ="http://www.shnenglu.com/wolf/aggbug/71835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wolf/" target="_blank">老狼</a> 2009-01-12 23:22 <a href="http://www.shnenglu.com/wolf/articles/71835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>注意C++ STL容器中erase的?/title><link>http://www.shnenglu.com/wolf/articles/70368.html</link><dc:creator>老狼</dc:creator><author>老狼</author><pubDate>Thu, 25 Dec 2008 16:03:00 GMT</pubDate><guid>http://www.shnenglu.com/wolf/articles/70368.html</guid><wfw:comment>http://www.shnenglu.com/wolf/comments/70368.html</wfw:comment><comments>http://www.shnenglu.com/wolf/articles/70368.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/wolf/comments/commentRss/70368.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wolf/services/trackbacks/70368.html</trackback:ping><description><![CDATA[<p>erase()函数的功能是用来删除容器中的元素<br></p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">函数原型:<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>iterator erase(iterator where);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>iterator erase(iterator first,iterator last);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>basic_string</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000"> erase(size_type p0</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,size_type n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">np);</span></div> <p><br>删除某个容器里的某个元素Qc.erase(T);<br>看似一个简单的动作Q然而对不同cd的容器,内部却做?jin)截然不同的事情Q后面介l?/p> <p>假设有这样一个题目,某个容器中所有满x件N == X的元素删除,按照常规的思\应该有类DL(fng)代码Q?br></p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 假设Container和container分别表示一U容器和对应的一个对?/span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">Container</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::iterator it;<br></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (it </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> container.begin(); it </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> container.end(); </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">it) {<br>  </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (N </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> X)<br>    container.erase(it);<br>}</span></div> <p><br>然而这L(fng)代码对于MU容器都是错误的<img src="http://www.shnenglu.com/CuteSoft_Client/CuteEditor/images/emsad.gif" align=absMiddle border=0><br>容器按内存分配方式可以分为链表容器和数组容器?br>所谓的链表容器指的是一U表现方式,包括list、slist{这样基于节点的容器Q动态分配内存块Q和set、map、multiset、multimap{关联容器(q?wi)实玎ͼ?j)Q而数l容器指的是在一块连l的内存上保存元素的q箋内存容器Q比如vector、deque、string{?/p> <p>OKQ现在说说erase对他们的操作Q链表容器以listZQ当执行container.erase(it)Ӟ实W一个满x件的元素删除?jin),但这时it指针已经被删除了(jin)Q它也不指向M元素?jin),所以也只能到此为止?jin),也就是说上面的代码对于链表容器来说只能正删除第一个满x件的元素Q针对这个问题我们首先想到的是在删除指针之前,l其做个备䆾Q很好,不错的主意,我们一般采用的Ҏ(gu)是徏立个临时变量Q这个(f)时变量可以在E序循环中适当的位|用,看下列代码实玎ͼ是将q个临时变量直接建立在erase实现里,q样做更z,也显得专业些<img src="http://www.shnenglu.com/CuteSoft_Client/CuteEditor/images/emsmile.gif" align=absMiddle border=0>Q以删除int型链表中所有偶Cؓ(f)例,也是大家都喜Ƣ的一个例子)(j)Q?br></p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">  list</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::iterator it; <br>  </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (it </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> lt.begin(); it </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> lt.end(); ) {<br>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">it </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>      lt.erase(it</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">);<br>    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>      </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">it;<br>  }</span></div> <p>链表容器使用erase删除节点q有一个特点,是?x)将下一个元素的地址q回Q所以也可以q样实现Q?/p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">  list</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::iterator it; <br>  </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (it </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> lt.begin(); it </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> lt.end(); ) {<br>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">it </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>      it </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> lt.erase(it);<br>    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>      </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">it;<br>  }</span></div> <p><br>当然用list容器本n提供的算法也是个不错的主意(挂回调)(j)Q?/p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">  </span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000"> evenNumber(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> n)<br>  {<br>    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> (n </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br>  }<br>  <br>  <img src="http://www.shnenglu.com/Images/dot.gif"><img src="http://www.shnenglu.com/Images/dot.gif"><br>  <br>  lt.remove_if(evenNumber);</span></div> <p><br>数组容器以vectorZQ当执行container.erase(it)Ӟ和上面提到的一PW一个满x件的元素删除?jin),但这时数l容器不允许中间?#8220;I隙”Q所以会(x)做个大动作,是被删元素后面所有的元素前移Q参考STL源码Q,而数l容器记录的是下标,所以删除元素后Q当前下标定位的元素也就理成章的变成了(jin)原有队列中的下一个元素,同样以删除偶Cؓ(f)例,代码如下Q?/p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">  vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::iterator it </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> v.begin();<br>  </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (it </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> v.begin(); it </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> v.end(); ) { <br>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">it </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>      v.erase(it);<br>    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>      </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">it;<br>  }</span></div> <p>也可以用reverse_iteratorq代器,q且在某些删除操作中?x)有更好的效率(因?f)它会(x)使上面提到的“大动?#8221;变小一些)(j)Q?/p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">  vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::reverse_iterator ri </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> v.rbegin();<br>  </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> ( ; ri </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> v.rend(); ) { <br>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">ri </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">) <br>      v.erase((</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">ri).</span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">());<br>    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> <br>      </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">ri;<br>  }</span></div> <p><br> </p> <img src ="http://www.shnenglu.com/wolf/aggbug/70368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wolf/" target="_blank">老狼</a> 2008-12-26 00:03 <a href="http://www.shnenglu.com/wolf/articles/70368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>析C++ 大三?/title><link>http://www.shnenglu.com/wolf/articles/68785.html</link><dc:creator>老狼</dc:creator><author>老狼</author><pubDate>Sun, 07 Dec 2008 13:14:00 GMT</pubDate><guid>http://www.shnenglu.com/wolf/articles/68785.html</guid><wfw:comment>http://www.shnenglu.com/wolf/comments/68785.html</wfw:comment><comments>http://www.shnenglu.com/wolf/articles/68785.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/wolf/comments/commentRss/68785.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wolf/services/trackbacks/68785.html</trackback:ping><description><![CDATA[<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">C++<font face=宋体>中几?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><font face=宋体>所有的c都?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>拯</font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><font face=宋体>构造函敎ͼ析构函数和赋值操作符</font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>重蝲函数Q即使你不显C定义,~译器也?x)自动生成的Q?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><font face=宋体>它们提供的都是一些最基本的功?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p> <p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>拯</font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><font face=宋体>构造函?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>Q?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><font face=宋体>一U特D的构造函敎ͼ他由~译器调用来完成一些基于同一cȝ其他对象的构件及(qing)初始化;</font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><o:p></o:p></span></p> <p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><font face=宋体>析构函数</font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>Q?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><font face=宋体>摧毁一个对象ƈ保证它被d清除Q?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><o:p></o:p></span></p> <p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><font face=宋体>赋值操作符</font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>Q以已有对象?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><font face=宋体>l?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>另一</font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><font face=宋体>对象q行新的</font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><font face=宋体>倹{?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'"><o:p></o:p></span></p> <p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>所谓的大三律(rule of three, the law of the big three or the big threeQ正是在规则他们之间的关p:(x)</font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p> <p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>1.如果cd义了(jin)析构函数Q那么也应该定义拯构造和赋D符Q?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p> <p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>2.如果cd有需要动态分配的成员Q那么该cdd义拷贝构造和赋D符Q?/font></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p> <p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>一句话Q析构函数、拷贝构造、赋D符重蝲应该L同时出现。下面一个简单的例子E序对这个定律做?jin)论证?x)</font></span></p> <p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体></font></span></p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;<br></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Test<br></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img id=Codehighlighter1_54_209_Open_Image onclick="this.style.display='none'; Codehighlighter1_54_209_Open_Text.style.display='none'; Codehighlighter1_54_209_Closed_Image.style.display='inline'; Codehighlighter1_54_209_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_54_209_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_54_209_Closed_Text.style.display='none'; Codehighlighter1_54_209_Open_Image.style.display='inline'; Codehighlighter1_54_209_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_54_209_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_54_209_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Test() <br></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img id=Codehighlighter1_82_121_Open_Image onclick="this.style.display='none'; Codehighlighter1_82_121_Open_Text.style.display='none'; Codehighlighter1_82_121_Closed_Image.style.display='inline'; Codehighlighter1_82_121_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_82_121_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_82_121_Closed_Text.style.display='none'; Codehighlighter1_82_121_Open_Image.style.display='inline'; Codehighlighter1_82_121_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_82_121_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_82_121_Open_Text><span style="COLOR: #000000">{  <br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>      _pdata </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">]; <br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Test() <br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img id=Codehighlighter1_142_174_Open_Image onclick="this.style.display='none'; Codehighlighter1_142_174_Open_Text.style.display='none'; Codehighlighter1_142_174_Closed_Image.style.display='inline'; Codehighlighter1_142_174_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_142_174_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_142_174_Closed_Text.style.display='none'; Codehighlighter1_142_174_Open_Image.style.display='inline'; Codehighlighter1_142_174_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_142_174_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_142_174_Open_Text><span style="COLOR: #000000">{ <br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>      delete [] _pdata; <br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  <br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> _pdata;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main()<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img id=Codehighlighter1_225_273_Open_Image onclick="this.style.display='none'; Codehighlighter1_225_273_Open_Text.style.display='none'; Codehighlighter1_225_273_Closed_Image.style.display='inline'; Codehighlighter1_225_273_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_225_273_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_225_273_Closed_Text.style.display='none'; Codehighlighter1_225_273_Open_Image.style.display='inline'; Codehighlighter1_225_273_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_225_273_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_225_273_Open_Text><span style="COLOR: #000000">{ <br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  Test a;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  Test b;<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  <br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  b </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> a;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span></div> 上面q么一D늮单的代码看似没什么问题,然而却隐藏着严重的内存泄霌Ӏ?br>?5行定义了(jin)一个类的对象,同时对象a中的数据成员_pdata也在堆中分配?jin)内存,同?6行对对象b做了(jin)同样的事情,然?8行处a赋值给bQ默认赋D符做的是对数据成员逐个的赋|或者说是做?jin)浅拯Q所以对象b中的成员_pdata指向?jin)跟对象a中的_pdata的同一块内存,在析构的时候就?x)生a中的_pdata指向的那块内存被释放?jin)两ơ,而原先对象b中分配的内存却没有释攄问题?br>如果?6?8行换成Test b = a或Test b(a)Q结果是一L(fng)Q不同的是调用的是拷贝构造函数?br><br>既然知道?jin)问题所在,那么解决的方法当然自己来定义拯构造和赋D符?jin),具体做法׃列D?jin)?br><br>在某些情况下Q实现类的拷贝构造函数和赋值操作符是非帔R?ch)的时候,特别是确定程序中不会(x)做拷贝和赋值操作的时候,d现它们确实有点得不偿失。而不定义又怕出Cq问题,在这里有个y妙(与其说y妙不如说h:-)Q的Ҏ(gu)Q就是可以只它们声明ؓ(f)private成员而不d现它们。这h可以防止?jin)?x)有hLC用它们,也防止了(jin)~译器自动生成?br><br>Z提一下拷贝构造被调用的三U场合:(x)<br>1.在声明语句中用一个对象初始化另一个对象;<br>2.一个对象作为参数按D用方式传递给另一个对象时生成对象副本Q?br>3.生成一个(f)时对象作为函数的q回l果Q?br><!--endfragment--> <img src ="http://www.shnenglu.com/wolf/aggbug/68785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wolf/" target="_blank">老狼</a> 2008-12-07 21:14 <a href="http://www.shnenglu.com/wolf/articles/68785.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>q回static内部变量的陷?/title><link>http://www.shnenglu.com/wolf/articles/67811.html</link><dc:creator>老狼</dc:creator><author>老狼</author><pubDate>Tue, 25 Nov 2008 07:06:00 GMT</pubDate><guid>http://www.shnenglu.com/wolf/articles/67811.html</guid><wfw:comment>http://www.shnenglu.com/wolf/comments/67811.html</wfw:comment><comments>http://www.shnenglu.com/wolf/articles/67811.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/wolf/comments/commentRss/67811.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wolf/services/trackbacks/67811.html</trackback:ping><description><![CDATA[先看一个例子:(x)<br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>#include </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>#include </span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> fun(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> src)<br></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img id=Codehighlighter1_87_158_Open_Image onclick="this.style.display='none'; Codehighlighter1_87_158_Open_Text.style.display='none'; Codehighlighter1_87_158_Closed_Image.style.display='inline'; Codehighlighter1_87_158_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_87_158_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_87_158_Closed_Text.style.display='none'; Codehighlighter1_87_158_Open_Image.style.display='inline'; Codehighlighter1_87_158_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_87_158_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_87_158_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> dest[</span><span style="COLOR: #000000">32</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  <br></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  strcpy(dest, src);<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> dest;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main()<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id=Codehighlighter1_172_365_Open_Image onclick="this.style.display='none'; Codehighlighter1_172_365_Open_Text.style.display='none'; Codehighlighter1_172_365_Closed_Image.style.display='inline'; Codehighlighter1_172_365_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_172_365_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_172_365_Closed_Text.style.display='none'; Codehighlighter1_172_365_Open_Image.style.display='inline'; Codehighlighter1_172_365_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_172_365_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_172_365_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> s1[</span><span style="COLOR: #000000">32</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> s2[</span><span style="COLOR: #000000">32</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  strcpy(s1, fun(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  strcpy(s2, fun(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">world</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s %s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, s1, s2);<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s %s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, fun(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">), fun(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">world</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div> <p>    M下这个程序,先看q个E序写的有问题没Q假设fun函数的参数长度小?2Q?如果你对q个E序中的fun函数q回一个局部变量的数组产生?jin)疑问,那么我希望你是没注意到我使用的staticcdQ若你仍有疑问,你先回去查查static变量的作用域和生命周期的概念?br>    OKQ是q行q个E序的时候了(jin)Q看一下运行结果是否跟你想象的一样呢Q如果是一L(fng)Q那么这文章你不用看了(jin)Q因Z已经掌握?jin)我下面要说的问题?jin)。好吧,对于不理解运行结果的朋友Q我们来分析一些下面那个printf语句Q首先要知道printf中的表达式、函数的执行序是至叛_左的Q也是先执行了(jin)fun("world")q回?jin)dest的地址Q然后再执行fun("hello")也返回了(jin)dest的地址Q而这两次q回的dest用的同一块地址Q因为是staticcdQ,也就是第二次的执行覆盖了(jin)W一ơ执行的l果Q对dest地址q行?jin)重新的赋|所以结果就是打C个hello?jin)?/p> <p><br>    我们在写C(j)/C++E序的时候,l常需要从调用函数中取得自己想要的数据Q这需要调用者和函数之间要有个内存的交互Q我们通常采用的方法是传递一个指针给被调函数Q作调函数的输出参数Q这也是我们常用的、规范的做法?br>    但有很多E序员比较习(fn)惯直接取q回|q就面(f)一个问题就是普通局部变量都是在栈上分派的,?x)随着函数的结束而弹栈释放,那么׃(x)出现q回局部变量数l的问题Q这时有Z(x)惛_用malloc或new在堆上分zֆ存,没错Q这h避免?jin)前面说的问题,但这样又会(x)带来新的问题,是需要在外部对这块内存进行释放,q个是比较难把握的,多次释放?x)出现程序的crashQ忘记释放了(jin)?x)出现内存leakQ所以这U方法也不被推荐。还有h惛_?jin)更另类的方法,是上面例子中的staticcdQ没错,static变量也是全局的,但就?x)出C面程序的q行l果Q可以认Z是我们想要的l果Q也是错误的结果)(j)?br>    所以,我们要慎用返回函数内部的static内存的这U设计,但如果在无法改变设计模式的情况下Q有些系l函数的实现Q比如inet_ntoaQ可以通过在man手册中看到这L(fng)一句话QThe string is returned in a statically allocated buffer, which subsequent calls will overwriteQ,那么在自׃用的时候一定要注意Q不要试图保存返回的内存地址或引用,而要保存q回内存的内容,也就是例子程序中的strcpy两行?br><br>inet_ntoa的错误用(判断两个IP地址是否相等Q:(x)<br></p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> in_addr addr1;<br></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> in_addr addr2;<br></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> |络包中包含?jin)源地址</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #008000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">addr1.s_addr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0x6500A8C0</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 192.168.0.101</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #008000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">addr2.s_addr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0x6600A8C0</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 192.168.0.102<br></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #008000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #008000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> q个if语句永qؓ(f)?/span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #008000"><img id=Codehighlighter1_214_234_Open_Image onclick="this.style.display='none'; Codehighlighter1_214_234_Open_Text.style.display='none'; Codehighlighter1_214_234_Closed_Image.style.display='inline'; Codehighlighter1_214_234_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_214_234_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_214_234_Closed_Text.style.display='none'; Codehighlighter1_214_234_Open_Image.style.display='inline'; Codehighlighter1_214_234_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (strcmp(inet_ntoa(addr1), inet_ntoa(addr2)) </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">) </span><span id=Codehighlighter1_214_234_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_214_234_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> do something</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #008000"><img id=Codehighlighter1_241_263_Open_Image onclick="this.style.display='none'; Codehighlighter1_241_263_Open_Text.style.display='none'; Codehighlighter1_241_263_Closed_Image.style.display='inline'; Codehighlighter1_241_263_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_241_263_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_241_263_Closed_Text.style.display='none'; Codehighlighter1_241_263_Open_Image.style.display='inline'; Codehighlighter1_241_263_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span id=Codehighlighter1_241_263_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_241_263_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> do other thing</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #008000"><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span></div> <img src ="http://www.shnenglu.com/wolf/aggbug/67811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wolf/" target="_blank">老狼</a> 2008-11-25 15:06 <a href="http://www.shnenglu.com/wolf/articles/67811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>三元q算W的使用http://www.shnenglu.com/wolf/articles/66898.html老狼老狼Fri, 14 Nov 2008 04:03:00 GMThttp://www.shnenglu.com/wolf/articles/66898.htmlhttp://www.shnenglu.com/wolf/comments/66898.htmlhttp://www.shnenglu.com/wolf/articles/66898.html#Feedback0http://www.shnenglu.com/wolf/comments/commentRss/66898.htmlhttp://www.shnenglu.com/wolf/services/trackbacks/66898.html三元q算W对于CE序员来说应该是很熟(zhn)的?jin),有时它可以代码更简z、清晎ͼ所以深得一部分E序员的喜爱Q但在用上是不是每一个程序员都知道它的准用法呢Q今天有人给我看?jin)一个非常简单的E序Q问我ؓ(f)什么编译出错,我才知道原来真的有h?x)忽略这个问题,代码如下Q?br>

#include <iostream>

using namespace std;

int main()
{
  
int a = 1;
  
  (a 
!= 1? a = 2 : cout << "hello" << endl;

  
return 0;
}

发现问题?jin)吗Q我让他把coutҎ(gu)?jin)printfQ又让他仔细看了(jin)~译错误的信息,q且man printf看返回倹{?br>是的Q三元运符的两个表辑ּ是需要的intcdQ而coutq回值是void*Q看来我们常用的未必都是我们真正掌握?img src="http://www.shnenglu.com/CuteSoft_Client/CuteEditor/images/emsmile.gif" align=absMiddle border=0>


老狼 2008-11-14 12:03 发表评论
]]>
使用getopt分析命o(h)行参?/title><link>http://www.shnenglu.com/wolf/articles/63962.html</link><dc:creator>老狼</dc:creator><author>老狼</author><pubDate>Tue, 14 Oct 2008 07:56:00 GMT</pubDate><guid>http://www.shnenglu.com/wolf/articles/63962.html</guid><wfw:comment>http://www.shnenglu.com/wolf/comments/63962.html</wfw:comment><comments>http://www.shnenglu.com/wolf/articles/63962.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/wolf/comments/commentRss/63962.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wolf/services/trackbacks/63962.html</trackback:ping><description><![CDATA[<div style="PADDING-RIGHT: 5px; PADDING-LEFT: 4px; FONT-SIZE: 13px; BORDER-LEFT-COLOR: rgb(204,204,204); PADDING-BOTTOM: 4px; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BACKGROUND-COLOR: rgb(238,238,238)"><span style="COLOR: rgb(0,0,255)">getoptQ)(j)原型Q?/span></div> <div style="PADDING-RIGHT: 5px; PADDING-LEFT: 4px; FONT-SIZE: 13px; BORDER-LEFT-COLOR: rgb(204,204,204); PADDING-BOTTOM: 4px; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> getopt( </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> argv[], </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">optstring );</span></div> 参数argc、argv分别对应main函数的参敎ͼ表示参数个数和参数数l,optstring为选项字符丌Ӏgetopt函数调用?x)返回第一个选项Q如果以相同的参数再ơ调用的话会(x)q回下一个选项Q以此类推,当参数列已经到结时getopt()函数q回-1Q当遇到一个未知的选项?getopt q回'?'Qƈ且每ơ都?x)重新设|相应的全局变量? <div>getopt()讄的全局变量包括Q?/div> <div>1.optarg(char*) -- 指向当前选项参数的指针;</div> <div>2.optind(int)   -- 再次调用getopt()时的下一个argv指针的烦(ch)引;</div> <div>3.optopt(int)   -- 最后一ơ调用getopt()q回的已知选项Q?/div> <div>4.opterr(int)   -- 变量opterr被初始化?。如果不希望getopt()输出出错信息Q将全域变量opterr设ؓ(f)0卛_Q?/div> <div>用一个自己应用到的例子来单解析该函数Q?/div> <div><span style="FONT-SIZE: 13px"><span style="COLOR: rgb(0,128,128)"> 1</span> <span style="COLOR: rgb(0,0,0)">#include </span><span style="COLOR: rgb(0,0,0)"><</span><span style="COLOR: rgb(0,0,0)">stdio.h</span><span style="COLOR: rgb(0,0,0)">></span><span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)"> 2</span> <span style="COLOR: rgb(0,0,0)">#include </span><span style="COLOR: rgb(0,0,0)"><</span><span style="COLOR: rgb(0,0,0)">unistd.h</span><span style="COLOR: rgb(0,0,0)">></span><span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)"> 3</span> <span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)"> 4</span> <span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> main(</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> argc, </span><span style="COLOR: rgb(0,0,255)">char</span><span style="COLOR: rgb(0,0,0)">**</span><span style="COLOR: rgb(0,0,0)"> argv )<br></span><span style="COLOR: rgb(0,128,128)"> 5</span> <span style="COLOR: rgb(0,0,0)">{<br></span><span style="COLOR: rgb(0,128,128)"> 6</span> <span style="COLOR: rgb(0,0,0)">  </span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> chQdestConsole = 0; <br></span><span style="COLOR: rgb(0,128,128)"> 7</span> <span style="COLOR: rgb(0,0,0)">  </span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)"> def </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)"> 8</span> <span style="COLOR: rgb(0,0,0)">  </span><span style="COLOR: rgb(0,0,255)">char</span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)"> buf[</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">];<br></span><span style="COLOR: rgb(0,128,128)"> 9</span> <span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">10</span> <span style="COLOR: rgb(0,0,0)">  opterr </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">11</span> <span style="COLOR: rgb(0,0,0)">  </span><span style="COLOR: rgb(0,0,255)">while</span><span style="COLOR: rgb(0,0,0)"> ((ch </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> getopt(argc, argv, </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">Of:h:p:</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">))</span><span style="COLOR: rgb(0,0,0)">!=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">) {<br></span><span style="COLOR: rgb(0,128,128)">12</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">switch</span><span style="COLOR: rgb(0,0,0)">(ch) {<br></span><span style="COLOR: rgb(0,128,128)">13</span> <span style="COLOR: rgb(0,0,0)">      </span><span style="COLOR: rgb(0,0,255)">case</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">O</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">:<br></span><span style="COLOR: rgb(0,128,128)">14</span> <span style="COLOR: rgb(0,0,0)">        buf[</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> optarg;<br></span><span style="COLOR: rgb(0,128,128)">15</span> <span style="COLOR: rgb(0,0,0)">        </span><span style="COLOR: rgb(0,0,255)">break</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">16</span> <span style="COLOR: rgb(0,0,0)">      </span><span style="COLOR: rgb(0,0,255)">case</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">f</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">:<br></span><span style="COLOR: rgb(0,128,128)">17</span> <span style="COLOR: rgb(0,0,0)">        buf[</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> optarg;<br></span><span style="COLOR: rgb(0,128,128)">18</span> <span style="COLOR: rgb(0,0,0)">        </span><span style="COLOR: rgb(0,0,255)">break</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">19</span> <span style="COLOR: rgb(0,0,0)">      </span><span style="COLOR: rgb(0,0,255)">case</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">h</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">:<br></span><span style="COLOR: rgb(0,128,128)">20</span> <span style="COLOR: rgb(0,0,0)">        buf[</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> optarg;<br></span><span style="COLOR: rgb(0,128,128)">21</span> <span style="COLOR: rgb(0,0,0)">        </span><span style="COLOR: rgb(0,0,255)">break</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">22</span> <span style="COLOR: rgb(0,0,0)">      </span><span style="COLOR: rgb(0,0,255)">case</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">p</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">:<br></span><span style="COLOR: rgb(0,128,128)">23</span> <span style="COLOR: rgb(0,0,0)">        buf[</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> optarg;<br></span><span style="COLOR: rgb(0,128,128)">24</span> <span style="COLOR: rgb(0,0,0)">        </span><span style="COLOR: rgb(0,0,255)">break</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">25</span> <span style="COLOR: rgb(0,0,0)">      </span><span style="COLOR: rgb(0,0,255)">default</span><span style="COLOR: rgb(0,0,0)">:<br></span><span style="COLOR: rgb(0,128,128)">26</span> <span style="COLOR: rgb(0,0,0)">        def </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">27</span> <span style="COLOR: rgb(0,0,0)">    }   <br></span><span style="COLOR: rgb(0,128,128)">28</span> <span style="COLOR: rgb(0,0,0)">  }<br></span><span style="COLOR: rgb(0,128,128)">29</span> <span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">30</span> <span style="COLOR: rgb(0,0,0)">  printf(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">buf[0]: %s\n</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">, buf[</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">]);<br></span><span style="COLOR: rgb(0,128,128)">31</span> <span style="COLOR: rgb(0,0,0)">  printf(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">buf[1]: %s\n</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">, buf[</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">]);<br></span><span style="COLOR: rgb(0,128,128)">32</span> <span style="COLOR: rgb(0,0,0)">  printf(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">buf[2]: %s\n</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">, buf[</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">]);<br></span><span style="COLOR: rgb(0,128,128)">33</span> <span style="COLOR: rgb(0,0,0)">  printf(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">buf[3]: %d\n</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">, atoi(buf[</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">]));<br></span><span style="COLOR: rgb(0,128,128)">34</span> <span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">35</span> <span style="COLOR: rgb(0,0,0)">  </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">36</span> <span style="COLOR: rgb(0,0,0)">}</span></span><br></div> <div><span style="FONT-SIZE: 13px">q是一个记录日志的E序部分代码Q没做出错处理)(j)Q同时支持终端输出、写文g、远E传输等功能Q还有一些写数据库等Q不一一列DQ?/span></div> <div><span style="FONT-SIZE: 13px">选项字符串ؓ(f)Q?#8220;Of:h:p:”Q?/span></div> <div><span style="FONT-SIZE: 13px">O表示是无参数选项Q终端输出判断部分在14行,可以加一行给l端输出讄标记Q比如destConsole=1Q无参数自然对应30行就应该打印I;</span></div> <div><span style="FONT-SIZE: 13px">f、h、p都ؓ(f)有参数选项Q如果都有设|有效,那么对应的就?x)?1-33行分别打印文件名、主机名、端口号?/span></div> <div><span style="FONT-SIZE: 13px">q行l果Q?/span></div> <div><span style="FONT-SIZE: 13px"> <div>[root@develop-x /]# ./testOpt -O -f test.txt -h 192.168.0.111 -p 6666</div> <div>buf[0]: </div> <div>buf[1]: test.txt</div> <div>buf[2]: 192.168.0.111</div> <div>buf[3]: 6666</div> <div>复杂命o(h)行处理getopt_long()可以参考man和getopt()Q主要是增强?jin)长选项的功能?/div> </span></div> <img src ="http://www.shnenglu.com/wolf/aggbug/63962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wolf/" target="_blank">老狼</a> 2008-10-14 15:56 <a href="http://www.shnenglu.com/wolf/articles/63962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++构造函数调用构造函数的问题http://www.shnenglu.com/wolf/articles/63490.html老狼老狼Wed, 08 Oct 2008 10:51:00 GMThttp://www.shnenglu.com/wolf/articles/63490.htmlhttp://www.shnenglu.com/wolf/comments/63490.htmlhttp://www.shnenglu.com/wolf/articles/63490.html#Feedback0http://www.shnenglu.com/wolf/comments/commentRss/63490.htmlhttp://www.shnenglu.com/wolf/services/trackbacks/63490.html
 1 #include <iostream>                       
 2 
 3 using namespace std;
 4 
 5 class Test
 6 {
 7   public:
 8     int _mX;
 9     int _mY;
10 
11     Test(int n) 
12     {
13       _mX = n;
14       cout << this << endl;
15     }
16 
17     Test()
18     {
19       cout << this << endl;
20       Test(0);
21     }
22 };
23 
24 int main()
25 {
26   Test test;
27 
28   return 0;
29 }

    执行一下这D代码,打印Z(jin)两个不同的对象地址Q因Z带参数的构造函数实现里去调用带参数的构造函数时Qƈ没有完成对象内部的函数调用,而是优先选择?jin)通过带参数构造函数又构造出?jin)一个新的对象?/div>
所以在实际应用中,我们应该Q?/div>
1. 我们要尽量避免构造函数间的调用;
2. 有h?fn)惯在默认构造里Ҏ(gu)员进行初始化Q带参构造里q行赋值或更ؓ(f)复杂的处理,但实际各个构造函数的关系应该q列Q我们应该在每个构造函数里都做成员初始化的操作Q或者把成员初始化和每个构造函数要q行的同L(fng)操作装Z个类的私有成员函敎ͼ在每个构造函数里调用该成员函敎ͼ
3. 如果实在避免不了(jin)构造函C间的调用Q那只能用必杀?jin),采用new的方式,即上面的代码20行改?span style="FONT-SIZE: 13px; COLOR: rgb(57,57,57); LINE-HEIGHT: 21px; FONT-FAMILY: verdana">new (this)Test(0)Q构造函数在已经分配好的内存上执行,而不是重新分配新的内?span style="FONT-SIZE: 13px; COLOR: rgb(0,0,0)">;



老狼 2008-10-08 18:51 发表评论
]]> Ʒþþþþ| þþƷ99ɫĻ| þ99Ļþ| þþþùƷ| þ޾Ʒavվ| þó˾ƷƵ| þþ| þó˾Ʒ| ƷþþƷ| 97þۺɫdžѿ| ƷþþĻ| þþžžƷ99Ʒ| Ƭѹۿþ| ƷþþӰ㽶| þۺ97ɫ| þþþAVרJN| þҹۺϾþ| þþƷ޾Ʒ| ƷŮþAV| þþþ99ƷƬŷ | þþþ97Һ| ˾þۺ| ĻƷþ| ŷսպ91ۺһþþ | þþƷ| þۺ97ɫ| þùۺϾƷ| þۺϸϾþù | 㽶þþþ| ݺɫݺݺݺݺɫۺϾþ| þþþùƷ| ͵͵þþþվ| Ʒþþ㽶| þݺҹҹ2020һ| ˾þô߽ۺ5g| yy6080þ| aѹۿþav| þþþAVվ| ƷۺϾþþþþ888ѿ| ƷŮþþþþ2018| ھƷ˾þþþ|