﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-yhzjut</title><link>http://www.cppblog.com/yhzjut/</link><description>我的微博：http://weibo.com/u/1864371954</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 10:49:47 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 10:49:47 GMT</pubDate><ttl>60</ttl><item><title>继承关系是private</title><link>http://www.cppblog.com/yhzjut/archive/2012/09/09/190020.html</link><dc:creator>blinn</dc:creator><author>blinn</author><pubDate>Sun, 09 Sep 2012 03:04:00 GMT</pubDate><guid>http://www.cppblog.com/yhzjut/archive/2012/09/09/190020.html</guid><wfw:comment>http://www.cppblog.com/yhzjut/comments/190020.html</wfw:comment><comments>http://www.cppblog.com/yhzjut/archive/2012/09/09/190020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yhzjut/comments/commentRss/190020.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yhzjut/services/trackbacks/190020.html</trackback:ping><description><![CDATA[加入继承关系是private 编译器不会自动把derived class 转换成base class@import url(http://www.cppblog.com/cutesoft_client/cuteeditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);<img src ="http://www.cppblog.com/yhzjut/aggbug/190020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yhzjut/" target="_blank">blinn</a> 2012-09-09 11:04 <a href="http://www.cppblog.com/yhzjut/archive/2012/09/09/190020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>物体culling</title><link>http://www.cppblog.com/yhzjut/archive/2012/09/06/189736.html</link><dc:creator>blinn</dc:creator><author>blinn</author><pubDate>Thu, 06 Sep 2012 12:21:00 GMT</pubDate><guid>http://www.cppblog.com/yhzjut/archive/2012/09/06/189736.html</guid><wfw:comment>http://www.cppblog.com/yhzjut/comments/189736.html</wfw:comment><comments>http://www.cppblog.com/yhzjut/archive/2012/09/06/189736.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yhzjut/comments/commentRss/189736.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yhzjut/services/trackbacks/189736.html</trackback:ping><description><![CDATA[3D Game ENGINE DISIGN 66-67,原先在看的时候一直很没明白，test for nonintersection和test for intersection，该书中又把它称作不费力检测和费力检测。一开始一直不明白这两个不是一样的道理吗，图2.22给了个test for nonintersetion的例子，我当时就把它死记这个例子就是test for noninterstion。<br />今天，才发现他的test for nonintersection的意思其实是不完全能把intersection 检测出来，也可以这么理解test for nonintersection 他检测出来的，culled掉后，可能还有几个object遗漏下来，其实这几个object也是需要culled，但是数量不多，因此这种也可以叫做不费力检测<img src ="http://www.cppblog.com/yhzjut/aggbug/189736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yhzjut/" target="_blank">blinn</a> 2012-09-06 20:21 <a href="http://www.cppblog.com/yhzjut/archive/2012/09/06/189736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于dynamic_cast的理解</title><link>http://www.cppblog.com/yhzjut/archive/2012/09/05/189521.html</link><dc:creator>blinn</dc:creator><author>blinn</author><pubDate>Wed, 05 Sep 2012 02:23:00 GMT</pubDate><guid>http://www.cppblog.com/yhzjut/archive/2012/09/05/189521.html</guid><wfw:comment>http://www.cppblog.com/yhzjut/comments/189521.html</wfw:comment><comments>http://www.cppblog.com/yhzjut/archive/2012/09/05/189521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yhzjut/comments/commentRss/189521.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yhzjut/services/trackbacks/189521.html</trackback:ping><description><![CDATA[template &lt;class T&gt;<br />T* DynamicCast(object* obj)<br />{<br />return obj&amp;&amp; obj-&gt;IsDerived(T::TYPE)?(T*)obj:0;<br />现在有class A, class B,class C<br /><br />继承关系如下：<br />class A<br />{<br />}<br />class B:public A<br />{<br />}<br />class C:public B<br />{<br />}<br />DynamicCast的定义就是安全向下转换，我一开始认为一个基类的对象用dynamiccast转换到子类这样会是安全的；<br />如 A *a; B*b; &nbsp; &nbsp;b=DynamicCast(a);这样转换b得到其实是0？其实这样才是真正做到安全，因为B*b只是指向B类的指针，它指向的内容是没有继承部分的，转换到B类，那就会出错。那么dynamiccast有什么用呢？<br />考虑下面这种情况<br /><br />void cast(B* pkb)<br />{<br />&nbsp; &nbsp; &nbsp;C* c = DynamicCast(pkb);<br />&nbsp; &nbsp; //........<br />}<br /><br /><br />C* m_c;<br />//可能某个时候转换成了B<br />cast(m_c);这样调用的时候，函数内部用了dynamicCast保证，传进来虽然是B类型的，其实它是C类型的，但是某个时候转换成了B，因此这个指向B类的指针指向的内容其实也是有他的继承部分的，因此这样转换就没有问题。<img src ="http://www.cppblog.com/yhzjut/aggbug/189521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yhzjut/" target="_blank">blinn</a> 2012-09-05 10:23 <a href="http://www.cppblog.com/yhzjut/archive/2012/09/05/189521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>析构函数何时为虚</title><link>http://www.cppblog.com/yhzjut/archive/2012/08/29/188642.html</link><dc:creator>blinn</dc:creator><author>blinn</author><pubDate>Wed, 29 Aug 2012 07:26:00 GMT</pubDate><guid>http://www.cppblog.com/yhzjut/archive/2012/08/29/188642.html</guid><wfw:comment>http://www.cppblog.com/yhzjut/comments/188642.html</wfw:comment><comments>http://www.cppblog.com/yhzjut/archive/2012/08/29/188642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yhzjut/comments/commentRss/188642.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yhzjut/services/trackbacks/188642.html</trackback:ping><description><![CDATA[在c++教科书中，学习虚析构函数的时候经常会涉及到基类继承等，许多代码也经常把基类的析构函数设置成虚函数，但是有的时候也不一定为虚。那么何时析构函数要设置成虚呢？<br />简单总结下要用多态的时候就得用虚析构函数。<br />class shape<br />{<br />public:<br />&nbsp; &nbsp;shape();<br />&nbsp; ~shape();<br />}<br />class renctangle:public shape<br />{<br />public:<br />&nbsp; &nbsp; &nbsp;rectangle();<br />&nbsp; &nbsp; ~rectangle();<br />}<br />假如我们在应用当中，只会用到继承类，也就是renctangle *a = new recrangle；<br />之后只用这个a就可以完成功能，那么基类就不用虚析构函数了。<br />但是，我们有的时候，经常把renctangle指针强制转换成基类，然后用基类的函数操作。最后delete 基类指针，那么这个时候，就必须用虚析构函数。<img src ="http://www.cppblog.com/yhzjut/aggbug/188642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yhzjut/" target="_blank">blinn</a> 2012-08-29 15:26 <a href="http://www.cppblog.com/yhzjut/archive/2012/08/29/188642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>const 引用的一些猜测</title><link>http://www.cppblog.com/yhzjut/archive/2012/08/28/188510.html</link><dc:creator>blinn</dc:creator><author>blinn</author><pubDate>Tue, 28 Aug 2012 03:24:00 GMT</pubDate><guid>http://www.cppblog.com/yhzjut/archive/2012/08/28/188510.html</guid><wfw:comment>http://www.cppblog.com/yhzjut/comments/188510.html</wfw:comment><comments>http://www.cppblog.com/yhzjut/archive/2012/08/28/188510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yhzjut/comments/commentRss/188510.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yhzjut/services/trackbacks/188510.html</trackback:ping><description><![CDATA[最近在调试一段代码发现几个问题：<br />class test<br />{<br /><div>public:</div><div><span style="white-space:pre">	</span>testtest(){}</div><div><span style="white-space:pre">	</span>testtest(int a);</div><div><span style="white-space:pre">	</span>testtest(const testtest&amp; c );</div>}<br /><br />有某个函数如何下<br />void create(const test&amp; a)<br />{<br />}<br />调用如下：<br />create(1) 这样使用编译通过了，而且会调用testtest(int a)的构造函数<br />然后我就像把create的const去掉试一下<br />create(test&amp; a)结果编译错误<br />我就想加了const为什么会调用构造函数？<br />当然create(test a)这样肯定也是会调用构造函数的。之后我就猜想 函数参数const testest&amp; c和testtest c是允许有临时变量产生因此允许调用构造函数。testtest&amp; 只是想引用是不会调用构造函数的。<br /><br />但是我又想const testets&amp; 为什么要弄个临时变量呢，因为函数内对const引用改变 会有报错的，可能是为了安全吧，仅仅猜想，vs2008调试<img src ="http://www.cppblog.com/yhzjut/aggbug/188510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yhzjut/" target="_blank">blinn</a> 2012-08-28 11:24 <a href="http://www.cppblog.com/yhzjut/archive/2012/08/28/188510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读wild magic 看到的一个代码小细节</title><link>http://www.cppblog.com/yhzjut/archive/2012/08/27/188445.html</link><dc:creator>blinn</dc:creator><author>blinn</author><pubDate>Mon, 27 Aug 2012 12:10:00 GMT</pubDate><guid>http://www.cppblog.com/yhzjut/archive/2012/08/27/188445.html</guid><wfw:comment>http://www.cppblog.com/yhzjut/comments/188445.html</wfw:comment><comments>http://www.cppblog.com/yhzjut/archive/2012/08/27/188445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yhzjut/comments/commentRss/188445.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yhzjut/services/trackbacks/188445.html</trackback:ping><description><![CDATA[<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int iQuantity = (int)m_kInfoArray.size();</div><div><span style="white-space:pre">	</span>for (int i=0; i&lt; iQuantity; i++)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>const Info&amp; rkInfo = m_kInfoArray[i];</div><div><span style="white-space:pre">		</span>if (rkInfo.User == pkUser&amp;&amp; rkInfo.ID == pkID)</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>if (i &lt; --iQuantity)</div><div><span style="white-space:pre">			</span>{</div><div><span style="white-space:pre">				</span>m_kInfoArray[i] = m_kInfoArray[iQuantity];</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>m_kInfoArray.pop_back();</div><div><span style="white-space:pre">			</span>return;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}<br />在读这段代码的时候 我对作者用 i&lt; --iQuantity不是很理解，这样对代码阅读性不是很高，让我来写肯定是：<br /><div>if (i &lt; (iQuantity-1))</div><div>{</div><div><span style="white-space: pre; ">	</span>m_kInfoArray[i] = m_kInfoArray[iQuantity-1];</div><div>}<br />m_kInfoArray.pop_back();&nbsp;<br />iQuantity--;<br />这样的话一不改变iQuantity的值，他就是数组的长度，而且iQuantity-1就是数组最后一个,最后pop时候再iQruantity--,虽然这样代码行数多了，但是比较容易理解。后来发现作者是很注重代码高效性的人，的确游戏引擎的代码就是要尽可能高效。我这句i &lt; (iQuantity-1) 很明显iQuantity-1先生成一个临时变量然后再去和i比较，这里就浪费了。而作者的代码是没有一点浪费的。<br /></div></div><img src ="http://www.cppblog.com/yhzjut/aggbug/188445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yhzjut/" target="_blank">blinn</a> 2012-08-27 20:10 <a href="http://www.cppblog.com/yhzjut/archive/2012/08/27/188445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Effective c++笔记</title><link>http://www.cppblog.com/yhzjut/archive/2012/08/26/188321.html</link><dc:creator>blinn</dc:creator><author>blinn</author><pubDate>Sun, 26 Aug 2012 03:59:00 GMT</pubDate><guid>http://www.cppblog.com/yhzjut/archive/2012/08/26/188321.html</guid><wfw:comment>http://www.cppblog.com/yhzjut/comments/188321.html</wfw:comment><comments>http://www.cppblog.com/yhzjut/archive/2012/08/26/188321.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yhzjut/comments/commentRss/188321.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yhzjut/services/trackbacks/188321.html</trackback:ping><description><![CDATA[看到一个c++对象构造的一个细节，平时在写代码的时候都没有注意。<br />对象的成员变量的初始化动作发生在进入构造函数本体之前。<img src ="http://www.cppblog.com/yhzjut/aggbug/188321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yhzjut/" target="_blank">blinn</a> 2012-08-26 11:59 <a href="http://www.cppblog.com/yhzjut/archive/2012/08/26/188321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>