﻿<?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++博客-rebol-随笔分类-Technical Gemes </title><link>http://www.cppblog.com/rebol/category/4126.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 02 Jun 2008 16:41:56 GMT</lastBuildDate><pubDate>Mon, 02 Jun 2008 16:41:56 GMT</pubDate><ttl>60</ttl><item><title>RTTI</title><link>http://www.cppblog.com/rebol/archive/2007/07/31/29087.html</link><dc:creator>rebol</dc:creator><author>rebol</author><pubDate>Tue, 31 Jul 2007 09:10:00 GMT</pubDate><guid>http://www.cppblog.com/rebol/archive/2007/07/31/29087.html</guid><wfw:comment>http://www.cppblog.com/rebol/comments/29087.html</wfw:comment><comments>http://www.cppblog.com/rebol/archive/2007/07/31/29087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/rebol/comments/commentRss/29087.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/rebol/services/trackbacks/29087.html</trackback:ping><description><![CDATA[<blockquote> <p>//一道笔试题<br>//考察RTTI的基本知识， 运行时类型识别<br>//还要打开VC编译器的RTTI功能<br>//Project / Settings/ C/C++ /Catogory选C++ language就看到那个选项了<br>#include &lt;iostream&gt;<br>#include &lt;typeinfo&gt;<br>using namespace std;<br>class base<br>{<br>public:<br>virtual void funcA() {cout &lt;&lt; "base" &lt;&lt; endl;}<br>};<br>class derived : public base<br>{<br>public:<br>virtual void funcB() {cout &lt;&lt; "derived" &lt;&lt; endl;}<br>};<br>//要求func能够输出形参的真实类型，下面两个func都可以</p> <p>//funcC是用dynamic_cast类型转换是否成功来识别类型</p> <p>//dynamic_cast必须要在有虚函数的hierarchy里进行<br>void funcC(base *p)<br>{<br>derived *dp = dynamic_cast&lt;derived*&gt;(p);<br>if(dp != NULL)<br>dp-&gt;funcB();<br>else<br>p-&gt;funcA();<br>} </p> <p>//funcD用typeid操作符</p> <p>void funcD(base *p)<br>{<br>derived *dp = NULL;<br>if (typeid(*p) == typeid(derived))<br>{<br>dp = static_cast&lt;derived*&gt;(p);<br>dp-&gt;funcB();<br>}<br>else<br>p-&gt;funcA();  <p>}<br>int main()<br>{<br>base *cp = new derived;<br>funcD(cp);<br>funcC(cp);<br>base *dp = new base;<br>funcC(dp);<br>funcD(dp);<br>return 0;<br>}</p></blockquote><img src ="http://www.cppblog.com/rebol/aggbug/29087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/rebol/" target="_blank">rebol</a> 2007-07-31 17:10 <a href="http://www.cppblog.com/rebol/archive/2007/07/31/29087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Callback</title><link>http://www.cppblog.com/rebol/archive/2007/03/26/22535.html</link><dc:creator>rebol</dc:creator><author>rebol</author><pubDate>Mon, 26 Mar 2007 07:38:00 GMT</pubDate><guid>http://www.cppblog.com/rebol/archive/2007/03/26/22535.html</guid><wfw:comment>http://www.cppblog.com/rebol/comments/22535.html</wfw:comment><comments>http://www.cppblog.com/rebol/archive/2007/03/26/22535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/rebol/comments/commentRss/22535.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/rebol/services/trackbacks/22535.html</trackback:ping><description><![CDATA[
		<p>win32sdk里的回调函数,LRESULT CALLBACK WndProc(HWND, UNIT , WPARAM, LPARAM)<br /><br />编译后其实是long (__stdcall *)(void * , unsigned int , ,unsigned int , long );<br /><br />因为在windows头文件里有#define callback __stdcall,<br />LRESULT 是long型,<br />WndProc只是定义成了一个函数指针,几个参数第一个是对窗口的句柄,第二个是传来消息的标识符,三和四分别是消息的参数.<br /><br />比如系统可以传送一个UNIT叫做WM_COMMAND 的消息给回调函数,对应的用户的操作是点击了菜单.<br /><br />在网上查了下__stdcall的解释,没看懂,以后再琢磨</p>
		<img height="1" src="http://www.cnblogs.com/darsling/aggbug/688564.html" width="1" />
		<br />
		<br />
		<div align="right">
				<a style="TEXT-DECORATION: none" href="http://darsling.cnblogs.com/" target="_blank">小白太多了</a> 2007-03-26 15:38 <a style="TEXT-DECORATION: none" href="http://www.cnblogs.com/darsling/archive/2007/03/26/688564.html#Feedback" target="_blank">发表评论</a></div>
<img src ="http://www.cppblog.com/rebol/aggbug/22535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/rebol/" target="_blank">rebol</a> 2007-03-26 15:38 <a href="http://www.cppblog.com/rebol/archive/2007/03/26/22535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>^运算</title><link>http://www.cppblog.com/rebol/archive/2007/03/21/22536.html</link><dc:creator>rebol</dc:creator><author>rebol</author><pubDate>Wed, 21 Mar 2007 12:33:00 GMT</pubDate><guid>http://www.cppblog.com/rebol/archive/2007/03/21/22536.html</guid><wfw:comment>http://www.cppblog.com/rebol/comments/22536.html</wfw:comment><comments>http://www.cppblog.com/rebol/archive/2007/03/21/22536.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/rebol/comments/commentRss/22536.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/rebol/services/trackbacks/22536.html</trackback:ping><description><![CDATA[^是个二元运算,有个很好的性质.<br />如果a^b=c的话则c^a=b;c^b=a;只要把异或的四种情况列举一下就能证明.<br />于是^可以用来实现swap(a,b),不用额外设中间变量<br />a=a^b;<br />b=a^b;<br />a=a^b;<br />太神奇了 <img height="1" src="http://www.cnblogs.com/darsling/aggbug/683110.html" width="1" /><br /><br /><div align="right"><a style="TEXT-DECORATION: none" href="http://darsling.cnblogs.com/" target="_blank">小白太多了</a> 2007-03-21 20:33 <a style="TEXT-DECORATION: none" href="http://www.cnblogs.com/darsling/archive/2007/03/21/683110.html#Feedback" target="_blank">发表评论</a></div><img src ="http://www.cppblog.com/rebol/aggbug/22536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/rebol/" target="_blank">rebol</a> 2007-03-21 20:33 <a href="http://www.cppblog.com/rebol/archive/2007/03/21/22536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>声明和定义</title><link>http://www.cppblog.com/rebol/archive/2007/03/21/22537.html</link><dc:creator>rebol</dc:creator><author>rebol</author><pubDate>Wed, 21 Mar 2007 09:47:00 GMT</pubDate><guid>http://www.cppblog.com/rebol/archive/2007/03/21/22537.html</guid><wfw:comment>http://www.cppblog.com/rebol/comments/22537.html</wfw:comment><comments>http://www.cppblog.com/rebol/archive/2007/03/21/22537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/rebol/comments/commentRss/22537.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/rebol/services/trackbacks/22537.html</trackback:ping><description><![CDATA[   今天居然被问到声明和定义的区别,很久没听到这样的词了,因为很久没写程序了,好像还是在VC里用右键点击某个变量查看它的定义时见过这两个词,哪里知道还有这么多玄机.<br />   定义都是声明,声明并不一定是定义,也就是说定义是一种特殊情况<br />比如int i=0;既是定义,当然也就是声明.<br />   thinkin' 里说int A如果A没出现过(我理解为之前没使用过A这个标识符),则这也算定义,也会给它开辟内存空间,分配存储地址.<br />   声明要用extern,对函数的声明可用可不用.<br />两个问题<br />1.extern int i;是声明,那么是不是不管i出没出现过,这句话都是声明呢?<br />2.extern int i=0;网上有些人说这也是声明,对吗?<br /><br /><img height="1" src="http://www.cnblogs.com/darsling/aggbug/682954.html" width="1" /><br /><br /><div align="right"><a style="TEXT-DECORATION: none" href="http://darsling.cnblogs.com/" target="_blank">小白太多了</a> 2007-03-21 17:47 <a style="TEXT-DECORATION: none" href="http://www.cnblogs.com/darsling/archive/2007/03/21/682954.html#Feedback" target="_blank">发表评论</a></div><img src ="http://www.cppblog.com/rebol/aggbug/22537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/rebol/" target="_blank">rebol</a> 2007-03-21 17:47 <a href="http://www.cppblog.com/rebol/archive/2007/03/21/22537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>#ifndef......</title><link>http://www.cppblog.com/rebol/archive/2007/03/21/22538.html</link><dc:creator>rebol</dc:creator><author>rebol</author><pubDate>Wed, 21 Mar 2007 09:05:00 GMT</pubDate><guid>http://www.cppblog.com/rebol/archive/2007/03/21/22538.html</guid><wfw:comment>http://www.cppblog.com/rebol/comments/22538.html</wfw:comment><comments>http://www.cppblog.com/rebol/archive/2007/03/21/22538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/rebol/comments/commentRss/22538.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/rebol/services/trackbacks/22538.html</trackback:ping><description><![CDATA[
		<p>在头文件中假如#ifndef/#define/#endif就能防止该头文件被重复引用了,重复引用有什么危害,<br />变量被重复声明好像会遇到些问题,比如宏定义就不可以重复<br />所以以后的头文件内容都放在#ifndef 标识符<br />#define 标识符<br />.......(放这儿)<br />#endif<br />标识符也有点讲究,不用前导下划线,因为C标准库里用它来表示保留标识符<br />比如darsling.h就用darsling_h_,好看吗?还凑活</p>
		<img height="1" src="http://www.cnblogs.com/darsling/aggbug/682887.html" width="1" />
		<br />
		<br />
		<div align="right">
				<a style="TEXT-DECORATION: none" href="http://darsling.cnblogs.com/" target="_blank">小白太多了</a> 2007-03-21 17:05 <a style="TEXT-DECORATION: none" href="http://www.cnblogs.com/darsling/archive/2007/03/21/682887.html#Feedback" target="_blank">发表评论</a></div>
<img src ="http://www.cppblog.com/rebol/aggbug/22538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/rebol/" target="_blank">rebol</a> 2007-03-21 17:05 <a href="http://www.cppblog.com/rebol/archive/2007/03/21/22538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>