﻿<?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++博客-More than C++</title><link>http://www.cppblog.com/Lee/</link><description>Beyond  C++</description><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 23:33:07 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 23:33:07 GMT</pubDate><ttl>60</ttl><item><title>站姿和坐姿判断人</title><link>http://www.cppblog.com/Lee/archive/2010/03/01/108658.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Mon, 01 Mar 2010 06:00:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2010/03/01/108658.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/108658.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2010/03/01/108658.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/108658.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/108658.html</trackback:ping><description><![CDATA[
		<font size="2">每个人都有自己习惯的站立姿势。美国夏威夷大学心理学家指出，不同的站姿可以显示出一个人的性格特征。 <br /><br />站立时习惯把双手插入裤袋的人：城府较深，不轻易向人表露内心的情绪。性格偏于保守、内向。凡事步步为营，警觉性极高，不肯轻信别人。 <br /><br />站立时常把双手置于臀部的人：自主心强，处事认真而绝不轻率，具有驾驭一切的能力。他们最大的缺点是主观，性格表现固执、顽固。 <br /><br />站立时喜欢把双手叠放于胸前的人：这种人性格坚强，不屈不挠，不轻易向困境压力低头。但是由于过分重视个人利益，与人交往经常摆出一副自我保护的防范姿态，拒人于千里之外，令人难以接近。 <br /><br />站立时将双手握置于背后的人：性格特点是奉公守法，尊重权威，极富责任感，不过有时情绪不稳定，往往令人莫测高深，最大的优点是富于耐性，而且能够接受新思想和新观点。 <br /><br />站立时习惯把一只手插入裤袋，另一只手放在身旁的人：性格复杂多变，有时会极易与人相处，推心置腹。有时则冷若冰霜，对人处处提防，为自己筑起一道防护网。 <br /><br />站立时两手双握置于胸前的人：其性格表现为成竹在胸，对自己的所作所为充满成功感，虽然不至于睥睨一切，但却踌躇满志，信心十足。 <br /><br />站立时双脚合并，双手垂置身旁的人：性格特点诚实可靠，循规蹈矩而且生性坚毅，不会向任何困难屈服低头。 <br /><br />站立时不能静立，不断改变站立姿态的人：性格急躁，暴烈，身心经常处于紧张的状态，而且不断改变自己的思想观念。在生活方面喜欢接受新的挑战，是一个典型的行动主义者。 <br /></font>
		<p>
				<font size="2">       在电车或是普通座椅上，常将左脚跨在右脚之上者，通常均是患有脑溢血的人，而且他们的脸色较常人要红，这是由于右脚的关节不能自由活动而导致的现象，由于右脚有毛病，很难将其置放在左脚之上所造成的后果。 <br /><br />通常，不论哪只脚在上，大凡摆在上面的那只脚易于疲劳。当脚部出现疲劳现象时，可做脚腕部位的上下运动及扇形运动，促使毛细管扩张，促进血液循环，将会大大有益于缓解病症。 <br /><br />坐稳后两腿张开姿态懒散者，一般的说来都比较胖。这种人由于腿部的肉过多，行走不十分方便，说得比较多而做得相对要少。这类人属于豪言壮语型，头脑中想的事情经常是被夸大了的。 <br /><br />坐下时左肩上耸，膝部紧靠，致使双腿呈X字形的人，一般均比较谨慎，但他的决断力特差，也缺少男子汉的气魄。即使是一个男性，他也是比较女性化的男性。如果你对他有过多希望的话，其结果多为失望。 <br /><br />坐下手臂曲起，两脚向外伸的人，其决断力十分迟钝。每天他都在不断地计划些事物，但却什么也实现不了。这种人的理想与行动非常不协调，喜欢做白日梦。如果与此类人共事，相信一年中会出现不间断的纠纷。 <br /><br />坐下时两脚自然外伸，给人以一种十分沉着冷静印象的人，属直情径行类型。这些人大都身体健康，对疾病的抵抗力很强。就命运而言，他也是非常幸运的。 <br /><br />坐下时，一只手撑着下巴，另一只手搭在撑着下巴的那只手的手肘之上，且架着“二郎腿”的人，大都不拘小节，面对失败亦能泰然自若。不过，如果你被这种人迷惑住，他会厚颜无耻地去逃避责任，甚至对你使出各种利己而卑鄙的手段。 <br /><br />双肩端起，一脚架放在另一只脚之上作出庄重堂皇之态的人，虽然志向远大，但却缺乏具体计划，致使他的志向如空中楼阁一般，无法实现。 <br /><br />坐在车上两脚长伸在外，妨碍通道，同时将双手插在口袋里的人，大多是贫困潦倒之人。如果其相貌长得不好，通常伴有恐吓或胁迫他人的行为。对这种人，最好采取敬而远之的态度。 <br /><br />两脚弯曲，两手架在桌上伏身看书的人，容易患甲状腺异常及筋肿等疾病。如果是近视眼的人，他也可能会稍稍抬起屁股看书。 <br /><br />坐着看书时，脚尖坚起，同时眼睛不断向上翻的人，肯定是个急性子。这是一种天生的个性。即使他有很多看书的时间，但他还是显得非常匆忙，无法平心静气地看书。 <br /><br />驼着背看书的人，大多是高龄人，这种风貌是借着领取退休金颐养天年的作风。 <br /><br />在读书时，用手撑着下巴且姿势不良的人，其读书效率极差，同时此一姿态也是他的理解及记忆均有困难的人的象征。一个真正求学的人，是不会用这种不良姿态读书的。 <br /><br />跪坐在桌前，两手大张撑在桌上并不时左右观看者，如果他的神态又很怡然自若，那这就是一种计划大事业的姿态。 <br /><br />将脚伸出桌底，并经常用手抚弄桌角的人，是缺乏劳动意念的人，很难成就大事。 <br /><br />两脚前伸，同时作出俯卧姿态看书的人，常常是患有胃病的人。一个胃有毛病的人在进餐之后极易作出此种姿态。 <br /><br />一只脚跪坐，另一只脚直立下垂的看书姿态，通常是瘦型老人，多半把眼镜架在鼻梁下方。凡患胃及肾病之人，多属此类型的人。 <br /><br />坐下后，把一只脚伸出去，而把重心放在另一只脚的女性，是一位非凡的自豪家。可是，如果过份自信的话，反而会使她变成一位厚颜无耻的女性，使她的身心都无法正常发展，进而变得非常虚假。 <br /><br />坐下后两脚同时倒向一方的人，是一个长时间站立工作的人的特有的习惯。在百货公司里长期工作的女性，其坐姿通常如此。这种坐姿的人，常能坚持自己的立场，不论别人如何批评，她都不加理睬，也可以说是位脸皮很厚的女性。 <br /><br />坐下时，脚尖朝外，臂部与椅子紧密相贴，这种人非常耿直干脆，直觉感十分发达。 <br /><br />坐下时重心向中，第一脚趾轻触地面，脚尖部位稍稍离开而正坐的方式，是一种健康的坐姿。</font>
		</p>
<img src ="http://www.cppblog.com/Lee/aggbug/108658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2010-03-01 14:00 <a href="http://www.cppblog.com/Lee/archive/2010/03/01/108658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How To Learn English!</title><link>http://www.cppblog.com/Lee/archive/2009/11/23/101660.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Sun, 22 Nov 2009 16:18:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/11/23/101660.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/101660.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/11/23/101660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/101660.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/101660.html</trackback:ping><description><![CDATA[
		<p align="left">
				<b>
						<font size="4" face="Verdana">How To Learn English!</font>
				</b>
		</p>
		<p align="left">
				<b>
						<font size="2" face="Verdana">Here are some tips which may help you to master the English Language!</font>
				</b>
		</p>
		<p align="left">
				<b>
						<font color="#0000ff" size="3" face="Verdana">Speak without Fear</font>
				</b>
		</p>
		<p align="left">
				<font size="3" face="Verdana">The biggest problem most people face in learning a new language is their own fear.<span style="mso-spacerun: yes">  </span>They worry that they won’t say things correctly or that they will look stupid so they don’t talk at all.<span style="mso-spacerun: yes">  </span>Don’t do this.<span style="mso-spacerun: yes">  </span>The fastest way to learn anything is to do it – again and again until you get it right.<span style="mso-spacerun: yes">  </span>Like anything,<b> learning English requires practice</b>.<span style="mso-spacerun: yes">  </span>Don’t let a little fear stop you from getting what you want. <?XML:NAMESPACE PREFIX = O /?><o:p></o:p></font>
		</p>
		<p align="left">
				<b>
						<font color="#0000ff" size="3" face="Verdana">Use all of your Resources</font>
				</b>
		</p>
		<p align="left">
				<font size="3" face="Verdana">Even if you study English at a language school it doesn’t mean you can’t learn outside of class.<span style="mso-spacerun: yes">  </span>Using as many different sources, methods and tools as possible, will allow you to learn faster.<span style="mso-spacerun: yes">  </span>There are many different ways you can improve your English, so don’t limit yourself to only one or two.<span style="mso-spacerun: yes">  The internet is a fantastic resource for virtually anything, but for the language learner it's perfect. </span></font>
		</p>
		<p align="left">
				<b>
						<font color="#0000ff" size="3" face="Verdana">Surround Yourself with English</font>
				</b>
		</p>
		<p align="left">
				<font size="3" face="Verdana">The absolute best way to learn English is to surround yourself with it.<span style="mso-spacerun: yes">  </span>Take notes in English, put English books around your room, listen to English language radio broadcasts, watch English news, movies and television.<span style="mso-spacerun: yes">  </span>Speak English with your friends whenever you can.<span style="mso-spacerun: yes"></span>The more English material that you have around you, the faster you will learn and the more likely it is that you will begin “thinking in English.”<o:p> . </o:p></font>
		</p>
		<p align="left">
				<b>
						<font color="#0000ff" size="3" face="Verdana">Listen to Native Speakers as Much as Possible</font>
				</b>
		</p>
		<p align="left">
				<font size="3" face="Verdana">There are some good English teachers that have had to learn English as a second language before they could teach it.<span style="mso-spacerun: yes">  </span>However, there are several  reasons why many of the best schools prefer to hire native English speakers.<span style="mso-spacerun: yes"></span>One of the reasons is that native speakers have a natural flow to their speech that students of English should try to imitate.<span style="mso-spacerun: yes">  </span>The closer ESL / EFL students can get to this rhythm or flow, the more convincing and comfortable they will become. <o:p></o:p></font>
		</p>
		<p align="left">
				<b>
						<font color="#0000ff" size="3" face="Verdana">Watch English Films and Television</font>
				</b>
		</p>
		<p align="left">
				<font size="3" face="Verdana">This is not only a fun way to learn but it is also very effective.<span style="mso-spacerun: yes">  </span>By watching English films (especially those with <b>English</b> subtitles) you can expand your vocabulary and hear the flow of speech from the actors.<span style="mso-spacerun: yes">  </span>If you listen to the news you can also hear different accents.<span style="mso-spacerun: yes"> </span></font>
		</p>
		<p align="left">
				<b>
						<font color="#0000ff" size="3" face="Verdana">Listen to English Music</font>
				</b>
		</p>
		<p align="left">
				<font size="3" face="Verdana">Music can be a very effective method of learning English.<span style="mso-spacerun: yes">  </span>In fact, it is often used as a way of improving comprehension.<span style="mso-spacerun: yes">  </span>The best way to learn though, is to get the lyrics (words) to the songs you are listening to and try to read them as the artist sings.<span style="mso-spacerun: yes">  There are several good internet sites where one can find the words for most songs. </span>This way you can practice your listening and reading at the same time.<span style="mso-spacerun: yes">  </span>And if you like to sing, fine.<o:p></o:p></font>
		</p>
		<p align="left">
				<b>
						<font color="#0000ff" size="3" face="Verdana">Study As Often As Possible!</font>
				</b>
		</p>
		<p align="left">
				<font size="3" face="Verdana">Only by studying things like grammar and vocabulary and doing exercises, can you really improve your knowledge of any language. <o:p></o:p></font>
		</p>
		<p align="left">
				<b>
						<font color="#0000ff" size="3" face="Verdana">Do Exercises and Take Tests</font>
				</b>
		</p>
		<p align="left">
				<font size="3" face="Verdana">Many people think that exercises and tests aren't much fun.<span style="mso-spacerun: yes">  </span>However, by completing exercises and taking tests you can really improve your English.<span style="mso-spacerun: yes"></span>One of the best reasons for doing lots of exercises and tests is that they give you a benchmark to compare your future results with.<span style="mso-spacerun: yes">  </span>Often, it is by comparing your score on a test you took yesterday with one you took a month or six months ago that you realize just how much you have learned.<span style="mso-spacerun: yes">  </span>If you never test yourself, you will never know how much you are progressing. <b>Start now by doing some of the many exercises and tests on this site, and return in a few days to see what you've learned</b>. Keep doing this and you really will make some progress with English.<o:p></o:p></font>
		</p>
		<p align="left">
				<b>
						<font color="#0000ff" size="3" face="Verdana">Record Yourself</font>
				</b>
		</p>
		<p align="left">
				<font size="3" face="Verdana">Nobody likes to hear their own voice on tape but like tests, it is good to compare your tapes from time to time.<span style="mso-spacerun: yes">  </span>You may be so impressed with the progress you are making that you may not mind the sound of your voice as much.<o:p></o:p></font>
		</p>
		<p align="left">
				<b>
						<font color="#0000ff" size="3" face="Verdana">Listen to English</font>
				</b>
		</p>
		<p align="left">
				<font size="3" face="Verdana">By this, we mean, speak on the phone or listen to radio broadcasts, audiobooks or CDs in English.<span style="mso-spacerun: yes"> </span>This is different than watching the television or films because you can’t see the person that is speaking to you.<span style="mso-spacerun: yes">  </span>Many learners of English say that speaking on the phone is one of the most difficult things that they do and the only way to improve is to practice.</font>
		</p>
		<p align="left">
				<font color="#0000ff" size="3" face="Verdana">
						<b>Finally</b>
				</font>
		</p>
		<p align="left">
				<font size="3" face="Verdana">Have fun!</font>
		</p>
<img src ="http://www.cppblog.com/Lee/aggbug/101660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-11-23 00:18 <a href="http://www.cppblog.com/Lee/archive/2009/11/23/101660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ 注册表操作总结</title><link>http://www.cppblog.com/Lee/archive/2009/05/03/81775.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Sun, 03 May 2009 09:30:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/05/03/81775.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/81775.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/05/03/81775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/81775.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/81775.html</trackback:ping><description><![CDATA[
		<div class="cnt" id="blog_text">
				<div>
						<strong>1、RegCloseKey()</strong>
						<br />　　原型：RegCloseKey(HKEY hKey)<br /><br />　　解释：关闭指定的注册表键，释放句柄。当对一个或多个键或值操作完成以后，需要关闭其键来进行保存操作结果，关闭一个键后，句柄变为非法，此时应释放句柄。</div>
				<div>
				</div>
				<div>
						<strong>2、RegCreateKeyEx()</strong>
						<br />　　原型：LONG RegCreateKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved,<br />LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes,<br />PHKEY phkResult, LPDWORD lpdwDisposition );<br /><br />　　解释：打开指定的键或子键。如果要打开的键不存在的话，本函数会试图建立它。提供该函数是为了向后兼容。所有的WIN32应用程序应使用函数RegCreateKeyEx（）。　各参数及返回值的含义如下：</div>
				<div>
						<br />·hKey为主键值，可以取下面的一些数值：HKEY_CLASSES_ROOT、HKEY_CURRENT_CONFIG、　　HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USER、HKEY_PERFORMANCE_DATA(WINNT操作系统)、HKEY_DYN_DATA（WIN9X操作系统）；</div>
				<div>·参数lpSubKey为一个指向以零结尾的字符串的指针，其中包含将要创建或打开的子键的名称。子键不可以用反斜线（\）开始。该参数可以为NULL；<br /><br />·参数Reserved为保留值，必须设置为0；<br /><br />·参数lpClass为一个指向包含键类型的字符串。如果该键已经存在，则忽略该参数；<br /><br />·参数dwOptions为新创建的键设置一定的属性。可以取下面的一些数值：　　REG_OPTION_NON_VOLATILE ，表示新创建的键为一个非短暂性的键（数据信息保存在文件中，当系统重新启动时，数据信息恢复）；REG_OPTION_VOLATILE，表示新创建的键为一个短暂性的键（数据信息保存在内存中），Windows95忽略该数值；REG_OPTION_BACKUP_RESTORE 仅在WINNT中支持，可以提供优先级支持；<br /><br />　　·参数samDesired用来设置对键访问的权限，可以取下面的一些数值：KEY_CREATE_LINK，表示准许生成符号键；KEY_CREATE_SUB_KEY 表示准许生成子键；KEY_ENUMERATE_SUB_KEYS 表示准许生成枚举子键；KEY_EXECUTE 表示准许进行读操作；KEY_NOTIFY表示准许更换通告；　　KEY_QUERY_VALUE 表示准许查询子键；KEY_ALL_ACCESS 提供完全访问，是上面数值的组合；<br /><br />　　KEY_READ 是下面数值的组合：KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY；　　KEY_SET_VALUE 表示准许设置子键的数值；KEY_WRITE 是下面数值的组合：KEY_SET_VALUE、KEY_CREATE_SUB_KEY；<br />·参数lpSecurityAttributes为一个指向SECURITY_ATTRIBUTES结构的指针，确定返回的句柄是否被子处理过程继承。如果该参数为NULL，则句柄不可以被继承。在WINNT中，该参数可以为新创建的键增加安全的描述；<br /><br />　　·参数phkResult为一个指向新创建或打开的键的句柄的指针；<br /><br />　　·参数lpdwDispition指明键是被创建还是被打开的，可以是下面的一些数值：　　REG_CREATE_NEW_KEY 表示键先前不存在，现在被创建；REG_OPENED_EXISTING_KEY 表示键先前已存在，现在被打开。<br /><br />　　如果该函数调用成功，则返回ERROR_SUCCESS。否则，返回值为文件WINERROR.h中定义的一个非零的错误代码，可以通过设置FORMAT_MESSAGE_FROM_SYSTEM标识调用FormatMessage（）函数来获取一个对错误的总体描述。</div>
				<div>
						<strong>3、RegOpenKeyEx（）</strong>
						<br />　　原型：LONG RegOpenKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions,<br />REGSAM samDesired, PHKEY phkResult );<br /><br />　　解释：打开一个指定的键，并返回打开键的句柄。<br /><br />各参数及返回值的含义如下：<br />·参数hKey的含义同RegCreateKeyEx函数中的hKey参数；<br /><br />·参数lpSubKey为一个指向以零结尾的字符串的指针，其中包含子键的名称，可以利用反斜线（\）分隔不同的子键名。如果字符串为空，则根据hKey参数创建一个新的句柄。在这种情况下，并不关闭先前打开的句柄；</div>
				<div>·参数ulOption保留，通常必须设置为0；<br /><br />·参数samDesired的含义同RegCreateKeyEx函数中的samDesired参数；<br /><br />·参数phkResult为一个指针，用来指向打开的键的句柄。可以通过RegCloseKey函数关闭这个句柄；<br /><br />·函数的返回值同RegCreateKeyEx函数的返回值。</div>
				<div>
						<strong>4、查询某一个键值：RegQueryValueEx（）<br /></strong>
						<br />　　原型：LONG RegQueryValueEx(HKEY hKey, LPCTSTR lpValueName, LPDWORD pReserved, LPDWORD lpType,<br />LPBYTE lpData, LPDWORD lpcbData );<br /><br />　　解释：根据要查询的键的句柄，要返回的查询的数据。<br /><br />　　各个参数及返回值的含义如下：<br /><br />　　·参数hKey为当前的一个打开的键的句柄，具体数值同RegCreateKeyEx函数的hKey参数；<br /><br />　　·参数lpVauleName为一个指向非空的包含查询值的名称的字符串指针；<br /><br />　　·参数lpReserved保留，必须为NULL；<br /><br />　　·参数lpType为一个指向数据类型的指针，数据类型为下列类型之一：REG_BINARY 二进制数据、REG_DWORD 32位整数、REG_DWORD_LITTLE_ENDIAN little－endian格式的数据，例如0X12345678以（0X78 0X56 0X34 0X12）方式保存、REG_DWORD_BIG_ENDIAN big－endian格式的数据，例如0X12345678以（0X12 0X34 0X56 0X78）方式保存、REG_EXPAND_SZ 一个包含未扩展环境变量的字符串、REG_LINK 一个Unicode类型的链接、REG_MULIT_SZ 以两个零结尾的字符串、REG_NONE 无类型数值、REG_RESOURCE_LIST 设备驱动资源列表、REG_SZ 一个以零结尾的字符串根据函数使用的字符集类型的不同而设置为Unicode或ANSI类型的字符串；<br /><br />　　·参数lpData为一个指向保存返回值的变量的指针。如果不需要返回值，该参数可以为NULL；<br /><br />　　·参数lpcbData为一个指向保存返回值长度的变量的指针。其中长度以字节为单位。如果数据类型为REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ，那么长度也包括结尾的零字符，只有在参数lpData为NULL时，参数lpcbData才可以为NULL；返回值同RegCreateKeyEx函数的返回值；</div>
				<div>
						<strong>　5、RegSetValueEx（）</strong>
						<br />
						<br />　　原型：LONG RegSetValueEx(HKEY hKey, LPCTSTR lpValueName, LPDWORD lpReserved, DWORD dwType,<br />const BYTE *lpData, DWORD cbData);<br /><br />　　解释：设置注册表中的一个键值。<br /><br />　　各个参数及返回值的含义如下：<br /><br />　　·参数hKey的含义同RegCreateKeyEx函数中的hKey参数；<br /><br />　　·参数lpValueName为一个指向包含值名的字符串指针；Reserved保留，通常必须设置为0；<br /><br />　　·参数dwType确定了设置的值的类型同RegQueryValueKeyEx的lyType参数；<br /><br />　　·参数lpData为一个指向包含数据的缓冲区的指针；<br /><br />　　·参数cbData以字节为单位，指定数据的长度；<br /><br />　　返回值同RegCreateKeyEx函数的返回值。</div>
				<div>
						<strong>6、RegDeketeKey（）</strong>
						<br />
						<br />　　原型：LONG RegDeleteKey（HKEY hKey，LPCTSTR lpSubKEY）；<br /><br />　　解释：函数RegDeketeKey删除一个键及所有的子键。<br /><br />　　各个参数及返回值的含义如下：<br /><br />　　·参数hKey的含义同RegCreateKeyEx函数中的hKey参数；<br /><br />　　·参数lpSubKey的含义同RegCreateKeyEx函数中的lpSubKey参数。</div>
		</div>
<img src ="http://www.cppblog.com/Lee/aggbug/81775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-05-03 17:30 <a href="http://www.cppblog.com/Lee/archive/2009/05/03/81775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>句柄(转自百度百科)</title><link>http://www.cppblog.com/Lee/archive/2009/05/01/81612.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Thu, 30 Apr 2009 20:51:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/05/01/81612.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/81612.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/05/01/81612.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/81612.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/81612.html</trackback:ping><description><![CDATA[句柄概念在WINDOWS编程中是一个很重要的概念，在许多地方都扮演着重要的角色。但由此而产生的句柄概念也大同小异，比如：&lt;&lt;Microsoft Windows 3 Developer's Workshop&gt;&gt;(Microsoft Press,by Richard Wilton)一书中句柄的概念是：在Windows环境中，句柄是用来标识项目的，这些项目包括：<br /><div class="spctrl"></div>　　*.模块(module)<br /><div class="spctrl"></div>　　*.任务(task)<br /><div class="spctrl"></div>　　*.实例(instance)<br /><div class="spctrl"></div>　　*.文件(file)<br /><div class="spctrl"></div>　　*.内存块(block of memory)<br /><div class="spctrl"></div>　　*.菜单(menu)<br /><div class="spctrl"></div>　　*.控制(control)<br /><div class="spctrl"></div>　　*.字体(font)<br /><div class="spctrl"></div>　　*.资源(resource),包括图标(icon)，光标(cursor)，字符串(string)等<br /><div class="spctrl"></div>　　*.GDI对象(GDI object),包括位图(bitmap)，画刷(brush)，元文件（metafile),调色板(palette)，画笔(pen)，区域(region)，以及设备描述表(device context)。<br /><div class="spctrl"></div>　　WINDOWS程序中并不是用物理地址来标识一个内存块，文件，任务或动态装入模块的，相反的，WINDOWS API给这些项目分配确定的句柄，并将句柄返回给应用程序，然后通过句柄来进行操作。<br /><div class="spctrl"></div>　　在&lt;&lt;WINDOWS编程短平快&gt;&gt;(南京大学出版社）一书中是这么说的：句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数，WINDOWS使用各种各样的句柄标识诸如应用程序实例，窗口，控制，位图，GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。<br /><div class="spctrl"></div>　　从上面的2个定义中的我们可以看到，句柄是一个标识符，是拿来标识对象或者项目的，它就象我们的姓名一样，每个人都会有一个，不同的人的姓名不一样，但是，也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄，之后其他的WINDOWS函数就可以使用该句柄，以引用相应的对象。在WINDOWS编程中会用到大量的句柄，比如：HINSTANCE（实例句柄），HBITMAP（位图句柄），HDC（设备描述表句柄），HICON（图标句柄）等等，这当中还有一个通用的句柄，就是HANDLE，比如下面的语句：<br /><div class="spctrl"></div>　　HINSTANCE hInstance；<br /><div class="spctrl"></div>　　可以改成：<br /><div class="spctrl"></div>　　HANDLE hInstance；<br /><div class="spctrl"></div>　　上面的2句语句都是对的。<br /><div class="spctrl"></div>　　一个WINDOWS应用程序可以用不同的方法获得一个特定项的句柄。许多API函数，诸如CreateWindow,GlobalAlloc,OpenFile的返回值都是一个句柄值。另外，WINDOWS也能通过应用程序的引出函数将一个句柄作为参数传送给应用程序，应用程序一旦获得了一个确定项的句柄，便可在WINDOWS环境下的任何地方对这个句柄进行操作。其实句柄的大量使用已经影响到了每一个WINDOWS的程序设计。<br /><div class="spctrl"></div>　　句柄只有当唯一的确定了一个项目的时候，它才开始有意义。句柄对应着项目表中的一项，而只有WINDOWS本身才能直接存取这个表，应用程序只能通过API函数来处理不同的句柄，举个例子来说吧！比如：我们可以为我们的应用程序申请一块内存块，通过调用API函数GlobalAlloc,来返回一个句柄值：<br /><div class="spctrl"></div>　　hMem=GlobalAlloc(......);<br /><div class="spctrl"></div>　　其实现在hMem的值只是一个索引值，不是物理地址，应用程序还不能直接存取这块内存。这儿还有一个话外题，就是，一般情况下我们在编程的时候，给应用程序分配的内存都是可以移动的或者是可以丢弃的，这样能使有限的内存资源充分利用，所以，在某一个时候我们分配的那块内存的地址是不确定的，因为他是可以移动的，所以得先锁定那块内存块，这儿应用程序需要调用API函数GlobalLock函数来锁定句柄。如下：<br /><div class="spctrl"></div>　　lpMem=GlobalLock(hMem);<br /><div class="spctrl"></div>　　这样应用程序才能存取这块内存。<br /><div class="spctrl"></div>　　<b>注意：<br /><div class="spctrl"></div>　　内核对象句柄，是用来标识某个内核对象的一个id<br /><div class="spctrl"></div>　　同一个对象的该id对于每个进程是不同的，具体如何实现是ms不公开的算法，以下是一个近似的，可能的算法：<br /><div class="spctrl"></div>　　进程创建时，windows系统为进程构造了一个句柄表<br /><div class="spctrl"></div>　　当该进程希望获得一个内核对象句柄或者创建一个内核对象从而获得该对象句柄时<br /><div class="spctrl"></div>　　系统会将在句柄表中增加一个表项，表项的内容中存储了指向目标内核对象的指针<br /><div class="spctrl"></div>　　同时，系统返回这个表项在句柄表中的索引作为句柄<br /><div class="spctrl"></div>　　</b><br /><div class="spctrl"></div>　　这样，进程就通过句柄查询句柄表得到对象指针，从而可以访问该对象。<br /><div class="spctrl"></div>　　同时又由于有了句柄表的保护，可以防止对内核对象的非法操作。<br /><div class="spctrl"></div>　　我想现在大家已经能对句柄概念有所了解了，我希望我的文章能对大家有所帮助。其实如果你学过SDK编程，那对句柄的概念理解会更好，更深。如果你是直接学VC6的MFC编程的，建议你看一下SDK编程，这会对你大有好处。<img src ="http://www.cppblog.com/Lee/aggbug/81612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-05-01 04:51 <a href="http://www.cppblog.com/Lee/archive/2009/05/01/81612.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>exit()和return的区别</title><link>http://www.cppblog.com/Lee/archive/2009/04/09/79403.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Thu, 09 Apr 2009 15:26:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/04/09/79403.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/79403.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/04/09/79403.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/79403.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/79403.html</trackback:ping><description><![CDATA[
		<p>return   是　ｃ语言中的保留字，指示程序正常结束，而exit()是一个库函数，后面可以加参数；   <br />  ｅｘｉｔ（0）也可以正常退出，如果加其它的数值：1，2，....可以表示由于不同的错误原因而退出。</p>
		<p>按照书上说的,在main函数里面return跟exit是一样的   <br />  但是实际应用中总能发现一些区别,   比如C++中,return会自动调用全局对象的析构函数,   而exit不会.   </p>
<img src ="http://www.cppblog.com/Lee/aggbug/79403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-04-09 23:26 <a href="http://www.cppblog.com/Lee/archive/2009/04/09/79403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试常考知识点</title><link>http://www.cppblog.com/Lee/archive/2009/04/09/79402.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Thu, 09 Apr 2009 15:25:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/04/09/79402.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/79402.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/04/09/79402.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/79402.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/79402.html</trackback:ping><description><![CDATA[
		<p>关于数组，指针，链表，类的问题，90%的笔试题目就是里面的原题<br />比如strcpy，strcat，链表逆序，排序，字符串匹配查找，检测单向链表上的环等等</p>
		<p>virtual，const，static，extern “C”，虚函数表，构造、析构函数可否为virtual，纯虚函数，虚拟继承</p>
<img src ="http://www.cppblog.com/Lee/aggbug/79402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-04-09 23:25 <a href="http://www.cppblog.com/Lee/archive/2009/04/09/79402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>托管代码（转）</title><link>http://www.cppblog.com/Lee/archive/2009/04/09/79400.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Thu, 09 Apr 2009 15:24:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/04/09/79400.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/79400.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/04/09/79400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/79400.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/79400.html</trackback:ping><description><![CDATA[
		<p>托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码，它们包括：C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的语言共享统一的类库集合，并能被编码成为中间语言(IL)。运行库编译器（runtime-aware ompiler）在托管执行环境下编译中间语言（IL）使之成为本地可执行的代码，并使用数组边界和索引检查，异常处理，垃圾回收等手段确保类型的安全。 </p>
		<p>在托管执行环境中使用托管代码及其编译，可以避免许多典型的导致安全黑洞和不稳定程序的编程错误。同样，许多不可靠的设计也自动的被增强了安全性，例如 类型安全检查，内存管理和释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减少代码的编写量。这就意味着更短的开发时间和更健壮的程序。 </p>
<img src ="http://www.cppblog.com/Lee/aggbug/79400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-04-09 23:24 <a href="http://www.cppblog.com/Lee/archive/2009/04/09/79400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编写插件锁住Word文档窗口  ——API和COM接口Hook综合演示（转）</title><link>http://www.cppblog.com/Lee/archive/2009/04/09/79392.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Thu, 09 Apr 2009 14:55:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/04/09/79392.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/79392.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/04/09/79392.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/79392.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/79392.html</trackback:ping><description><![CDATA[关键字　API Hook，COM Hook，ATL，Office 文档安全，C++<br /><br />　　现在的木马后门种类非常之多，其中有些木马专门以Office 文档为窃取目标，我最近做了一些Anti这些木马的工作，在工作中我基本上实现了阻止未知程序利用Office自动化接口窃取Word内容，但限于公司利益我只能写一些基本上已经比较成熟和公开的技术，当然其中了包含我的设计思想，我想多多少少会让你有所收获，你可任意转载文章，但请注明作者和出处，谢谢！<br />　　首先我们知道Ole拖放是由DoDragDrop启动的，为此你可以事先要准备一些参数给DoDragDrop使用，最开始我的想法是直接阻止DoDragDrop调用，后来我发现这样做会使Word文档窗口内部的拖放操作失效，这会给人一种很不好的感觉，好的保护软件应该在客户没有感觉到不方便的情况提供保护，而后我又仔细看了DoDragDrop的参数想发现有没有什么可以利用的地方，我发现它有四个参数：
<ul><li>IDataObject * pDataObject； 
</li><li>IDropSource * pDropSource； 
</li><li>DWORD dwOKEffect； 
</li><li>DWORD * pdwEffect； </li></ul><p>　　后两个参数基本上没有什么利用价值，我想到Hook IDataObject的GetData函数，可是在Ole Drop客户端编程时，通常当我调用COleDataObject的相关成员函数时拖放已经差不多完成，鼠标已经在我的程序窗口上了。<br />　　而我现在的想法是在拖放操作刚离开Word的文档窗口，还没有到达外部程序窗口时就让它失效，这样Hook IDataObject的虚函数肯定不行，我只有再研究一下最后一个没有研究过的参数pDropSource，它是一个IDropSource类型指针，我发现它有一个虚函数QueryContinueDrag查看了一下MSDN发现它似乎就是我要找的。<br />　　我的理解是这个函数是让Ole拖放的服务端在调用DoDragDrop启动Ole拖放操作后，有机会取消拖放操作而设的一个CallBack，于是我写了一段代码Hook住DoDragDrop并从DoDragDrop中进一步Hook住IDropSource的QueryContinueDrag虚函数，我发现它会全程跟踪整个拖放操作，只要这个CallBack一返回DRAGDROP_S_CANCEL整个拖放操作就会被取消，这样我只要知道当前鼠标下的窗口是否是文档窗口就可以了，一旦离开了文档窗口我就让这个CallBack返回DRAGDROP_S_CANCEL取消整个拖放操作。<br />　　这样做就可以不影响文档窗口内部的拖放操作，又可以阻止将文档窗口内部的东西拖放到其它程序中，基本上不会让客户感到不方便，这很有意思！不是吗?<br />　　那么从鼠标位置得到窗口句柄可能吗?答案是肯定的！ GetCursorPos函数可以返回一个POINT变量，它指示当前的鼠标位置，而WindowFromPoint则可以返回某一个POINT位置下的窗口句柄。写到这里我想差不多已经说完了我的思路，不知道你是否看得明白。<br />　　总结一下，用ATL向导生成一个COM框架，增加一个ATL简单对象，在这个对象上实现_IDTExtensibility2接口，在_IDTExtensibility2的OnConnection中Hook住DoDragDrop API，在Word调用DoDragDrop时记录下当前的文档窗口句柄，并Hook住第二个参数pDropSource的QueryContinueDrag虚函数，在QueryContinueDrag里跟踪当前鼠下的窗口是否还是文档窗口(比较句柄是否等于DoDragDrop时记录下的文档窗口句柄)，如果不是则返回DRAGDROP_S_CANCE取消拖放操作，并弹出一个警告信息的MessageBox，否则执行原有的操作(让拖放操作正常进行)。<br /><br />最后，别忘了注册你的Word插件(用Regsvr32。exe)，详细的键值和代码细节见源程序吧！<br /><br />2005年10月15日夜<br /><br />参考资料：</p><ul><li>MSDN October 2001 
</li><li>Microsoft Office 2000/Visual Basic Programmer''s Guide 
</li><li>ATL Internals 
</li><li>Inside C++ Object Model </li></ul><img src ="http://www.cppblog.com/Lee/aggbug/79392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-04-09 22:55 <a href="http://www.cppblog.com/Lee/archive/2009/04/09/79392.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用VC6.0编写Word插件(Office2K、XP、03)（转）</title><link>http://www.cppblog.com/Lee/archive/2009/04/09/79391.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Thu, 09 Apr 2009 14:53:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/04/09/79391.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/79391.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/04/09/79391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/79391.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/79391.html</trackback:ping><description><![CDATA[
		<a href="http://www.vcgood.com/bbs/forum_posts.asp?tid=1534" target="_blank">http://www.vcgood.com/bbs/forum_posts.asp?tid=1534</a>
		<br />
		<br />
		<p>最近因为工作的需要，学习了一下Office插件的编写方法。在走了不少弯路以后，最后终于把编写插件的原理给搞清楚了，不敢独享，拿出来跟大家共享一下。下面就以Word 2003为例，向大家简单介绍一下。<br />第一步，利用向导生成一个ATL COM AppWizard的新工程。<br /><br /><img id="chkImg1" height="359" src="mhtml:file://C:\Documents and Settings\Administrator\桌面\C语言帝国 用VC6_0编写Word插件(Office2K、XP、03).mht!http://www.vckbase.com/document/journal/vckbase50/images/addin01.jpg" width="554" border="0" name="chkImg2" /><br /><strong>图1</strong></p>
		<p>在向导的第一个对话框中，服务器类型选择Dynamic Link Library(DLL)，然后单击Finish即可。 
</p>
		<p>
				<img id="chkImg1" height="422" src="mhtml:file://C:\Documents and Settings\Administrator\桌面\C语言帝国 用VC6_0编写Word插件(Office2K、XP、03).mht!http://www.vckbase.com/document/journal/vckbase50/images/addin02.jpg" width="553" border="0" name="chkImg2" />
		</p>
		<p>
				<strong>图2</strong>
		</p>
		<p>然后，选取菜单Insert-&gt;New ATL Object项，在弹出的ATL对象向导对话框中选中相应Objects对应右侧的Simple Object选项，点击下一步。 
</p>
		<p>
				<img id="chkImg1" height="257" src="mhtml:file://C:\Documents and Settings\Administrator\桌面\C语言帝国 用VC6_0编写Word插件(Office2K、XP、03).mht!http://www.vckbase.com/document/journal/vckbase50/images/addin03.jpg" width="412" border="0" name="chkImg2" />
		</p>
		<p>
				<strong>图3</strong>
		</p>
		<p>在弹出的对话框中ShortName中输入相应名称，点确定完成插入ATL对象。 
</p>
		<p>
				<img id="chkImg1" height="261" src="mhtml:file://C:\Documents and Settings\Administrator\桌面\C语言帝国 用VC6_0编写Word插件(Office2K、XP、03).mht!http://www.vckbase.com/document/journal/vckbase50/images/addin04.jpg" width="419" border="0" name="chkImg2" />
		</p>
		<p>
				<strong>图4</strong>
		</p>
		<p>这样一个简单的基于ATL的COM组件工程就建立成功了。 
</p>
		<p>第二步，通过导入类型库来实现_IDTExtensibility2接口。在ClassView中的新加的类上点鼠标右键，在弹出的右键菜单中选Implement Interface项。 
</p>
		<p>
				<img id="chkImg1" height="462" src="mhtml:file://C:\Documents and Settings\Administrator\桌面\C语言帝国 用VC6_0编写Word插件(Office2K、XP、03).mht!http://www.vckbase.com/document/journal/vckbase50/images/addin05.jpg" width="363" border="0" name="chkImg2" />
		</p>
		<p>
				<strong>图5</strong>
		</p>
		<p>在弹出的实现接口对话框中点击Add Typelib 
</p>
		<p>
				<img id="chkImg1" height="337" src="mhtml:file://C:\Documents and Settings\Administrator\桌面\C语言帝国 用VC6_0编写Word插件(Office2K、XP、03).mht!http://www.vckbase.com/document/journal/vckbase50/images/addin06.jpg" width="425" border="0" name="chkImg2" />
		</p>
		<p>
				<strong>图6</strong>
		</p>
		<p>在弹出的Browse Type Libraries对话框中，选取Microsoft Add-in Designer(1.0)子项，点OK按钮 
</p>
		<p>
				<img id="chkImg1" height="344" src="mhtml:file://C:\Documents and Settings\Administrator\桌面\C语言帝国 用VC6_0编写Word插件(Office2K、XP、03).mht!http://www.vckbase.com/document/journal/vckbase50/images/addin07.jpg" width="386" border="0" name="chkImg2" />
		</p>
		<p>
				<strong>图7</strong>
		</p>
		<p>在弹出的接口列表对话框中选中_IDTExtensibility2接口，点OK按钮完成导入 
</p>
		<p>
				<img id="chkImg1" height="337" src="mhtml:file://C:\Documents and Settings\Administrator\桌面\C语言帝国 用VC6_0编写Word插件(Office2K、XP、03).mht!http://www.vckbase.com/document/journal/vckbase50/images/addin08.jpg" width="425" border="0" name="chkImg2" />
		</p>
		<p>这样的话，系统将会自动为你生成空的五个所需接口函数，分别是OnConnection、OnDisconnection、OnAddInsUpdate、OnStartupComplete、OnBeginShutdown。 
</p>
		<p>第三步，通过上面的两个步骤，我们的插件框架已经形成，但是Office怎么知道启动的时候要来把我们的插件Load起来呢？Office的不同组件，例如Word、Excel、Outlook等怎么知道去Load自己的插件呢？答案就是在注册表中加入相应的键值。打开文件视图FileView—&gt;Resource File中的rgs文件，加入以下代码：</p>
		<pre>HKCU
    {
      Software
       {
        Microsoft
        {
          Office
             { 
            Word
               {
             Addins
               {
               ''TestAddin.SimAddin''
                { 
                 val FriendlyName = s ''WORD Custom Addin''
                 val Description = s ''Word Custom Addin''
                 val LoadBehavior = d ''00000003''
                 val CommandLineSafe = d ''00000001''
                 }
               }
             }
          }
       }
   }
}
</pre>以上代码由三个需要注意的地方：<br />1. Office下面的那个子项代表了这个插件是属于那个组件，Word、Excel、Outlook等等。<br />2. Addins下面的那个子项要写成你添加的COM组件的名字，千万不要照着我的工程的名字照抄。<br />3. 所有的值两边加的都是单引号，而且要用英文下的单引号，不能用双引号。<br />这样一个Office插件的框架才算完成，你可以在OnConnection函数中加一些测试代码，看看有没有执行到，如果执行成功才能继续，否则检查上面的步骤有没有错误。 
<p>第四步，同时需要import两个office的文件，一个是MSO.dll，另一个是MSWORD.OLB。这两个文件可以在以下位置找到(具体位置与office安装路径有关):<br />C:\Program Files\Common Files\Microsoft Shared\OFFICE11<br />C:\Program Files\Microsoft Office\OFFICE11<br />然后在stdafx.h中加入如下语句： </p><pre>#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE11\\mso.dll" 
        \
        rename_namespace("Office") named_guids,exclude("Pages")
using namespace Office;

#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.olb" rename_namespace("VBE6")
using namespace VBE6;

#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\MSWORD.OLB" rename("ExitWindows","ExitWindowsEx")
#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\MSWORD.OLB" 
        \
        rename_namespace("Word"), raw_interfaces_only, named_guids ,exclude("Pages")
using namespace Word;</pre>加完以上代码以后一定要编译一下，看看是否能够成功。引入这两个文件的原因，主要是为了引入一些变量类型，为后面的创建UI作准备。<br />最后一步，编写代码。在OnConnection加入如下代码：<br /><pre>      CComPtr &lt; Office::_CommandBars&gt; spCmdBars; 
      CComQIPtr &lt;Word::_Application&gt; spApp(Application); 
      ATLASSERT(spApp);
      HRESULT hr = spApp-&gt;get_CommandBars(&amp;spCmdBars);
      if(FAILED(hr))
      return hr;
      ATLASSERT(spCmdBars);
      CComVariant vName("MyAddin");
      CComPtr &lt;Office::CommandBar&gt; spNewCmdBar;
      CComVariant vPos(1); 
      CComVariant vTemp(VARIANT_TRUE); 
      CComVariant vEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR); 
      spNewCmdBar = spCmdBars-&gt;Add(vName, vPos, vEmpty, vTemp);
       
      CComPtr &lt; Office::CommandBarControls&gt; spBarControls;
      spBarControls = spNewCmdBar-&gt;GetControls();
      ATLASSERT(spBarControls);
       
      CComVariant vToolBarType(1);
      CComVariant vShow(VARIANT_TRUE);
      CComPtr &lt; Office::CommandBarControl&gt; spNewBar; 
      spNewBar = spBarControls-&gt;Add(vToolBarType, vEmpty, vEmpty, vEmpty, vShow); 
      ATLASSERT(spNewBar);
        
      CComQIPtr &lt; Office::_CommandBarButton&gt; spCmdButton(spNewBar);
      ATLASSERT(spCmdButton);
        
      HBITMAP hBmp =(HBITMAP)::LoadImage(_Module.GetResourceInstance(),
      MAKEINTRESOURCE(IDB_BITMAP),IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS);
        
      ::OpenClipboard(NULL);
      ::EmptyClipboard();
      ::SetClipboardData(CF_BITMAP, (HANDLE)hBmp);
      ::CloseClipboard();
      ::DeleteObject(hBmp); 
        
      spCmdButton-&gt;PutStyle(Office::msoButtonIconAndCaption);
      hr = spCmdButton-&gt;PasteFace();
      if (FAILED(hr))
      return hr;
        
      spCmdButton-&gt;PutVisible(VARIANT_TRUE); 
      spCmdButton-&gt;PutCaption(OLESTR("myAddin")); 
      spCmdButton-&gt;PutEnabled(VARIANT_TRUE);
      spCmdButton-&gt;PutTooltipText(OLESTR("test1")); 
      spCmdButton-&gt;PutTag(OLESTR("test1")); 
      spNewCmdBar-&gt;PutVisible(VARIANT_TRUE); 
        
      m_spCmdButton = spCmdButton;</pre><p>这样，再次打开word，就可以看到如图一所示的界面效果了。</p><p><img id="chkImg1" height="127" src="mhtml:file://C:\Documents and Settings\Administrator\桌面\C语言帝国 用VC6_0编写Word插件(Office2K、XP、03).mht!http://www.vckbase.com/document/journal/vckbase50/images/addin09.jpg" width="218" border="0" name="chkImg2" /></p><p><strong>图9</strong></p><p>但是点击时没有响应，最后就让我们来解决这个问题。<br />1. 在COutlookAddin继承类中加入IDispEventSimpleImpl继承，代码如下: </p><pre>class ATL_NO_VTABLE COutlookAddin : 
        public CComObjectRootEx&lt;CComSingleThreadModel&gt;,
        ……
        public IDispEventSimpleImpl&lt;1,COutlookAddin,&amp;__uuidof(Office::_CommandBarButtonEvents)&gt;
        </pre>2. 声明_ATL_SINK_INFO结构回调参数信息。在OutlookAddin.h文件中加入下面语句： <pre>// 按钮事件响应信息声明
extern _ATL_FUNC_INFO OnClickButtonInfo;</pre>在OutlookAddin.cpp文件中加入定义语句，如下： <pre>// 按钮事件响应信息定义
_ATL_FUNC_INFO OnClickButtonInfo ={CC_STDCALL,VT_EMPTY,2,{VT_DISPATCH,VT_BYREF 
        | VT_BOOL}};</pre>3. 加入Sink映射，如下： <pre>EGIN_SINK_MAP(COutlookAddin)
      SINK_ENTRY_INFO(1, __uuidof(Office::_CommandBarButtonEvents),/*dispid*/ 
      0x01, OnClickButton1, &amp;OnClickButtonInfo)
      SINK_ENTRY_INFO(2, __uuidof(Office::_CommandBarButtonEvents),/*dispid*/ 
      0x01, OnClickButton2, &amp;OnClickButtonInfo)
      SINK_ENTRY_INFO(3, __uuidof(Office::_CommandBarButtonEvents),/*dispid*/ 
      0x01, OnClickMenu, &amp;OnClickButtonInfo)
      END_SINK_MAP()</pre><p>4. 加入事件函数。在OutlookAddin.h中加入声明： </p><pre>void __stdcall OnClickButton1(IDispatch * /*Office::_CommandBarButton**/ 
Ctrl,VARIANT_BOOL * CancelDefault);</pre>在OutlookAddin.cpp中加入实现： <br /><pre>// 工具条按钮1点击事件响应函数<br />
void __stdcall CWordAddin::OnClickButton1(IDispatch * 
	/*Office::_CommandBarButton**/ Ctrl,VARIANT_BOOL * CancelDefault)
{
		MessageBox(NULL, "hello", "world", MB_OK);
}</pre><br />5. 最后，打开或断开与接口的连接。方法如下<br />在OnConnection接口函数的最后部分，加入下面代码来打开连接： 
<ul><li>在OnConnection接口函数的最后部分，加入下面代码来打开连接： <pre>CommandButton1Events::DispEventAdvise((IDispatch*)m_spButton);</pre></li><li>在OnDisconnection接口函数中，加入下面代码来断开连接： <pre>CommandButton1Events::DispEventUnadvise((IDispatch*)m_spButton);</pre></li></ul><p>综上所述，编写一个简单的office的插件，其实并不难，只要按照步骤一步一步进行，肯定能成功，如果大家在使用过程中有什么疑问，欢迎一起探讨。</p><img src ="http://www.cppblog.com/Lee/aggbug/79391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-04-09 22:53 <a href="http://www.cppblog.com/Lee/archive/2009/04/09/79391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Word手写签名插件(COM加载项、VC6.0ATL)开发思路（转）</title><link>http://www.cppblog.com/Lee/archive/2009/04/09/79389.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Thu, 09 Apr 2009 14:52:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/04/09/79389.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/79389.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/04/09/79389.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/79389.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/79389.html</trackback:ping><description><![CDATA[
		<div class="wr f14">开发思路：</div>
		<div class="wr f14">　　写这个东东，其实就是写一个COM加载项。可以使用MFC、也可以使用ATL，也可以使用VB，我最终选用了ATL。主要是VC我用得比较多，而ATL通过模板库会给开发带来极大的便利，参考资料也比较多，因此选用了ATL。事实证明我的选择是正确的。不过使用VB相对要方便一些，VB可以很方便地对COM进行编程，编程中也可以直接使用Word的宏代码，根本不用做代码转换。</div>
		<div class="wr f14">　　开始编程，使用VC向导，可以很快的生成COM的框架，然后向工程里插入一个simple object（在菜单插入－＞插入ATL对象里面）。通过这个对象来改变WORD的菜单、TOOLBAR，这方面的文章很多，我的开发就是介绍了徐景周的一篇文章，到网上找一下，很多转载（我发现网上原创的东西实在不多呀）。这样一个简单的COM加载项的框架就建好了。</div>
		<div class="wr f14">　　手写签名部分的实现，这部分都是一些相对编程者容易的问题。简单说一下，首选插入一个对话框（在菜单插入－＞插入ATL对象里面），加入几个按钮，写一个单向链表用来存签名的笔画，用兼容DC、兼容位图、OleCreatePictureIndirect，把图片创建成一个IPictureDisp对象，以供下面的使用。</div>
		<div class="wr f14">　　再插入一个Full Control对象，方法同上。把上面一步生成的IPictureDisp写进Full Control对象，再调用WORD的AddOleCtrol方法将这个东东插入就可以了。</div>
		<div class="wr f14">　　这就是一个简单的流程。说的很粗略，因为不知道感兴趣的人多不多。</div>
		<div class="wr f14">　　在开发的过程中我遇到了以下这样一些问题，后来慢慢解决了，如果大家有兴趣可以来交流一下。</div>
		<div class="wr f14">　　1.如何在插入对象中取到WORD的ActiveDocument的指针（这个不能通过保存的方法来）。</div>
		<div class="wr f14">　　　　取Container的指针，再查IDispatch的接口。 </div>
		<div class="wr f14">      2.如果在程序里控制控件的删除，如在控件内点击，通过上下文菜单文菜单删除控件。</div>
		<div class="wr f14">　　　　可以给控件设置一下标志，然后通过Word的方法遍历对象组，检查对应的标志，然后删除。</div>
		<div class="wr f14">      3.如何保存。</div>
		<div class="wr f14">　　　可以重载框架的Save和Load方法，把对象的相关属性保存。这两个方法会由WORD自动调用。</div>
		<div class="wr f14">      4.如何使用TOOLTIP。</div>
		<div class="wr f14">　　　　这个在MSDN里有详细的帮助，可以参照解决。</div>
		<div class="wr f14">      5.如何移动控件。</div>
		<div class="wr f14">　　　　处理控件的OnLButtonDown/OnMouseMove/OnLButtonUp消息，然后通过Word的方法移动控件。</div>
		<div class="wr f14">
		</div>
		<div class="wr f14">     简单写了一下思路，欢迎交流。</div>
<img src ="http://www.cppblog.com/Lee/aggbug/79389.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-04-09 22:52 <a href="http://www.cppblog.com/Lee/archive/2009/04/09/79389.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不爱那么多只爱一点点    李敖</title><link>http://www.cppblog.com/Lee/archive/2009/04/09/79383.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Thu, 09 Apr 2009 14:27:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/04/09/79383.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/79383.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/04/09/79383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/79383.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/79383.html</trackback:ping><description><![CDATA[
		<br />不爱那么多只爱一点点，别人的爱情像海深我的爱情浅。不爱那么多只爱一点点，别人的爱情像天长我的爱情短。不爱那么多只爱一点点，别人眉来又眼去我只偷看你一眼。。。。。。 <img src ="http://www.cppblog.com/Lee/aggbug/79383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-04-09 22:27 <a href="http://www.cppblog.com/Lee/archive/2009/04/09/79383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个HR的建议和牢骚（转）</title><link>http://www.cppblog.com/Lee/archive/2009/04/09/79382.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Thu, 09 Apr 2009 14:26:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/04/09/79382.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/79382.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/04/09/79382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/79382.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/79382.html</trackback:ping><description><![CDATA[来自:http://blog.csdn.net/andylin02/archive/2009/02/25/3935547.aspx <br />作者：andylinID：andylin02 <br />最近，看到国家下文告诉社会07年有XXX万，08年还有XXX万，09年还有600多万大学生等待找工作。 <br />　　 希望大学生们"先就业再择业"。为什么我毕业时候国家没下这个文呢。。。 <br />　　 闲话不说，做主管岗位6年了，看过几千封简历。 <br />　　 这2周，公司大规模招聘，我基本就干一件事情，看简历。一天300～500封封。早中晚各看一次。 <br />　　 <br />　　找工作很难吗？不难，让HR通知你面试就是成功第一步。 <br />　　唉，现在的高校毕业办的人都在干嘛。 <br />　　除了收钱毛都不教，教的也不管毛用。 <br />　　 <br />　　如果你的朋友最近在找工作，在通过网上投简历找工作，希望下面的东西有一两条能帮到忙。 <br />　　情节1：不要用51JOB和CHINAHR的简历模板。 <br />　　答：的确51JOB橘色的模板，CHINAHR蓝色的模板很工整。但是让你一口气看100个一样模板的简历，你会怎样。 <br />　　建议：自己直接在写邮件的正文区里写点啥吧。2句话也行。 <br />　　 <br />　　情节2：不要用招聘网站的粘贴简历功能。 <br />　　答：好一点的招聘网站还凑活，很多招聘网站都会在邮件正文告诉阅览者，XXX对您提供的职位感兴趣，使用XXX网站的粘贴简历功能给您发送简历，后面是一串网址，让你点击查看详细简历。我是不会点的。 <br />　　建议：看娱乐新闻可以懒，投简历别懒。 <br />　　 <br />　　情节3：工作年限很重要。 <br />　　答：并不是说应届不好。很多公司（当然也包括我们这个小公司）在不同的时段会选择不同的人，如果恰好这个时期我们优先录用有工作经验的。可能我连滚动条都没往下拖，就点“下一封”了。 <br />　　建议：在工作年限那里填写你的项目经验年限或者社会实践年限。不是教大家骗人，到简历下面还是要如实说的。这么做只是让你的简历会被往下拖被看完。 <br />　　 <br />　　情节4：个人评价很重要。 <br />　　答：现在很多模板第2块就是填写你的基本评价。这个很重要很重要！如果你希望你的简历往下拖动。 <br />　　 a、不要喊口号。我的理想是。。。与我长袖。。（直接下一封。对不起，不是不尊重您。用人部门催的紧，一个HR1个小时看100封简历，一个简历不到1分钟。看简历中间还要被打岔。） <br />　　 b、不要抄！！！特别是美术岗位的。我看过很多美术求职者投2句都写的是:从事过专业的美术训练，绘画功底扎实。1段话，连标点符号都不差。。别听老师的，别偷看同学的。（记住：简历最重要第一点是：告诉我你和别人不一样。） <br />　　 c、不要说自己不好。某简历：虽然我尚未找到明确的职业方向，但我相信我会很努力去尝试。（等你找到职业方向再投吧）不好的地方不要刻意去暴露，比如“没有工作经验”这些话。我也知道你没经验，但不要说出来提醒我去注意，特别是一开始就说出来。 <br />　　 d、切忌写标准话。比如自学能力强，责任感很强这些。（太多了，兄弟。别人都这么写，都写在这一栏。你换个方式说。而且，在你还从没未想过给你父母买保险的年纪，我真的不觉得你能承载太多的责任。） <br />　　 <br />　　如果你不是用网站自带模板，打算自己写一个格式的简历，请往下看！ <br />　　1、简历标题 <br />　　 最好的简历标题，首推应聘销售岗位的人——“X年岗位经验诚心求职XXX部门XXX岗位 姓名 139XXXXXX” <br />　　 次一点的简历标题——“应聘XXX岗位” <br />　　 最次的简历标题——“求职” <br />　　 兄弟，你知道吗。看简历的人和通知面试的人往往不是一个人哦。HR看完如果觉得你合适，要把你的简历放在一个单独收件箱，然后告诉助理通知这个收件箱里所有人安排面试。助理需要再把你的简历打开，研究下你是应聘什么岗位的，找你的联系方式。如果助理MM今天心情非常不好，打了一下午电话了。可能就会告诉HR，你的电话联系不上哦。 <br />　　 <br />　　2、简历问候语 <br />　　 很重要！不要一上来就是“个人简历”4个大字，下面一堆文字和表格。麻烦先写2句问候语。尊敬的人事部经理：我很欣赏贵公司的XXXXXXX，。。。。。，下面是我的简历，请查收！（这样会让你和别人不同。如果你是个回家进门就和家人打招呼的好孩子，一定不会忘记这条的） <br />　　 <br />　　3、简历问候语下面的话 <br />　　 建议：这个时候还是不要写标题。而是写3，4句一小段话，直中红心。比如“我一直从事JAVA方面的项目，专注JAVA项目的开发，拥有1年中型项目经验，很强的代码规范能力。”（我当然知道也许你还会.NET或者别的，但你面试的是JAVA程序员，先谈谈JAVA吧。 <br />　　 <br />　　4、简历正文 <br />　　 终于，HR开始看你的全面介绍了。 <br />　　 a、求职动机 <br />　　 千万不要只写：我希望来学习这样的话。虽然任何公司都希望员工有学习精神，但不要让别人认为你的核心目的是来镀金的。公司本质讲不是学校。就算公司建立1000平方米研发中心，也不是办学校。 <br />　　 b、专业技能 <br />　　 这里切忌：不是一股脑把你的口袋都翻出来，告诉我你会这个会那个。 <br />　　 请拣对这个职位有+分的说。 <br />　　 我收到不少应聘行政的简历的应届毕业生，简历里不断给我讲她的课程有C语言，还把成绩单PO在后面。 <br />　　 小MM，行政是不用C语言的。给我讲点别的什么好吗。 <br />　　 b、不+分的特长不要写。 <br />　　 不要告诉我，你得过多少奖学金，当过什么课代表，学校什么杯比赛拿了个奖。 <br />　　 不是说你写的不真实。而是，就算是真实又怎样？能为你应聘这个职位+分吗？不能就不要写，画蛇添足，感觉心虚。 <br />　　 那什么样的学校经历可以写呢？ <br />　　 如果你应聘的是活动策划。可以写你在学校广播电台长期担任XX职位，学校舞蹈队XX职位。（前提是你真的干过。不用调查也能看出来的哦） <br />　　 如果你应聘的是程序员。可以写你对数学与程序的看法。不用多，2句也行。最牛B就是写一句话：大学四年自己写过10万行代码。冲着这句话，我一定约你来谈谈。 <br />　　 如果你应聘的是美术。可以谈谈老师规定的以外，你还画什么风格的，有商业型（不是艺术家型）的平面作品更好哦。 <br />　　 c、离职原因 <br />　　 这个。。。如果你面试的不是主管以上岗位，别写。 <br />　　 我见过一个简历，4次离职。A工作离职原因：公司管理混乱 B工作离职原因：没有发展空间 C工作离职原因：离家太远。 D工作离职原因：工作氛围不好。 <br />　　 这种简历一般我不会看中。也许下一次离职原因你会觉得公司楼下饭不好吃。 <br />　　 因为：如果你应聘是普通岗位，公司希望你是适应环境的人。如果你应聘的是管理岗位，公司希望你是创造环境的人。 <br />　　 如果非要写，建议：回家照看生病的父母（也许你是因为失恋想换个环境）；公司项目解散；与公司的合同到期； <br />　　 <br />　　 d、不要随便贴相片。如果你很好看，不要贴。一般，最好别贴。不自信，更别贴。 <br />　　 你要相信HR虽然不是算命的，但是面相这个东西，在各位HR的心里存在。你还要相信一点,HR都有职业病。大公司的HR更严重。HR是干嘛，每天看人。一回某人入职后表现让他失望了，HR被老板骂，二回、三回....你是HR你会有什么心理，轻微的心理发泄欲望。 <br />　　 当然，如果你面试的是总经理助理（助理分很多种），特别是帮总经理订票啊这些日常工作。如果你有足够自信，贴吧。因为聪明的HR在招这样岗位会明白BOSS都喜欢看美女。赌一把，贴了。 <br />　　 还有，贴的相片不要用身份证照。也不要用非主流侧脸嘟嘴可爱照。生活旅游照最好。男生要注意，胡子刮干净。去灯光亮点的照相馆。女生：看着自然。男生：看着规矩。就行。 <br />　　 e、结束语 <br />　　 简历的结束语很重要。说实话，不要说应届生，很多工作1、2年的人，连发工作邮件的签名怎么写都不知道（自己论坛的签名倒是很花哨）。 <br />　　 建议可以写。静候佳音、祝您心情愉快。落款 XXX，联系方式，日期（要写日期哦，HR看人看细节的）。 <br />　　 <br />　　5、简历附件 <br />　　 只有一类职业的简历附件我会下载看。就是技术工种的职业。因为HR一般能默许技术工种的人比较实在。。。 <br />　　 如果你是行政、产品、销售、管理类的岗位，千万不要用下载附件。因为除了技术工种，其他职位都要和人打交道很多。会不会做人就看你有没有服务意识。我要看这么多简历，你让我下载，你不知道公司网很卡吗。 <br />　　 如果你非要用附件。那么切记邮件正文要写点什么。不要白纸一张。 <br />　　-----------------------------------------------------------好了，其实写这么多。并不是说HR有多叼。而是告诉你，HR一般心里都经常窝火，自己都工作郁闷还要微笑对人。 <br />　　让HR从一大堆简历里，微笑的把你的简历看完，放进通知面试的文件夹就是第一步胜利。 <br />　　 ----祝各位有需要的朋友能找到好工作。 <img src ="http://www.cppblog.com/Lee/aggbug/79382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-04-09 22:26 <a href="http://www.cppblog.com/Lee/archive/2009/04/09/79382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>时钟周期  机器周期  指令周期</title><link>http://www.cppblog.com/Lee/archive/2009/04/01/78527.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Wed, 01 Apr 2009 00:49:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/04/01/78527.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/78527.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/04/01/78527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/78527.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/78527.html</trackback:ping><description><![CDATA[时钟周期<br />                时钟周期是一个时间的量，人们规定10纳秒（ns）为一个时钟周期。时钟周期表示了SDRAM所能运行的最高频率。更小的时钟周期就意味着更高的工作频率。对于PC100规格的内存来说，它的运行时钟周期应该不高于10纳秒。纳秒与工作频率之间的转换关系为：1000 / 时钟周期 = 工作频率。例如，标称10纳秒的PC100内存芯片，其工作频率的表达式就应该是1000 / 10 = 100MHZ，这说明此内存芯片的额定工作频率为100MHZ。目前市场上一些质量优秀的内存通常可以工作在比额定频率高的频率下，这为一些喜欢超频的朋友带来了极大的方便。例如KingMAX的PC100内存，此类内存多采用8纳秒的芯片，相对于其100MHZ的频率来说，频率提高的余地还很大，许多用户都可以让它们工作在133MHZ甚至更高的频率下。能不能超频使用很大程度上反应了内存芯片以及PCB板的质量。不过，仅仅凭借时钟周期来判断内存的速度还是不够的，内存CAS的存取时间和延迟时间也在一定程度上决定了内存的性能。<br /><br />简单理解　<br /> 　由输入输出接口来控制数据在主存器和外围设备之间的数据块传输，而不需要由CPU来对每个字节的传输进行控制。这种传输方式称为直接存储器访问方式。<br /><br />单片机时钟周期　　<br />        时钟周期是单片机的基本时间单位。<br /><div class="spctrl"></div>　　若时钟晶振的振荡频率为fosc，则时钟周期Tosc=1/fosc。<br /><div class="spctrl"></div>　　如：晶振频率为6MHZ，则时钟周期Tosc=166.7ns。<br />////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br />机器周期<br />       机器周期:通常用内存中读取一个指令字的最短时间来规定CPU周期,(也就是 <b>计算机通过内部或外部总线进行一次信息传输从而完成一个或几个微操作所需要的时间</b><br /><div class="spctrl"></div>　　),它一般由12个时钟周期组成。而时钟周期=1秒/晶振频率，因此单片机的机器周期=12秒/晶振频率 <br /><div class="spctrl"></div>　　补充其他几个周期：<br /><div class="spctrl"></div>　　指令周期：取出并执行一条指令的时间。 <br /><div class="spctrl"></div>　　时钟周期：处理操作的最基本单位。(CPU的主频) <br /><div class="spctrl"></div>　　存储周期：也就是一个访存指令周期。 <br /><div class="spctrl"></div>　　指令周期、机器周期和时钟周期之间的关系：指令周期通常用若干个机器周期表示，而机器周期时间又包含有若干个时钟周期。<br />/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br />指令周期<br />        CPU从内存取出一条指令并执行这条指令的时间总和。 <br /><div class="spctrl"></div>　　指令周期是执行一条指令所需要的时间，一般由若干个机器周期组成，是从取指令、分析取数到执行完所需的全部时间。指令不同，所需的机器周期数也不同。对于一些简单的的单字节指令，在取指令周期中，指令取出到指令寄存器后，立即译码执行，不再需要其它的机器周期。对于一些比较复杂的指令，例如转移指令、乘法指令，则需要两个或者两个以上的机器周期。<br /><div class="spctrl"></div>　　通常含一个机器周期的指令称为单周期指令，包含两个机器周期的指令称为双周期指令。 <img src ="http://www.cppblog.com/Lee/aggbug/78527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-04-01 08:49 <a href="http://www.cppblog.com/Lee/archive/2009/04/01/78527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>局部变量、全局变量、静态变量</title><link>http://www.cppblog.com/Lee/archive/2009/03/19/77103.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Wed, 18 Mar 2009 23:28:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/03/19/77103.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/77103.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/03/19/77103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/77103.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/77103.html</trackback:ping><description><![CDATA[
		<p>静态变量的类型说明符是static。 静态变量当然是属于静态存储方式，但是属于静态存储方式的量不一定就是静态变量，例如外部变量虽属于静态存储方式，但不一定是静态变量，必须由 static加以定义后才能成为静态外部变量，或称静态全局变量。对于自动变量，它属于动态存储方式。 但是也可以用static定义它为静态自动变量，或称静态局部变量，从而成为静态存储方式。</p>
		<p>　　由此看来， 一个变量可由static进行再说明，并改变其原有的存储方式。</p>
		<p>　　1. 静态局部变量</p>
		<p>　　在局部变量的说明前再加上static说明符就构成静态局部变量。</p>
		<p>　　例如：</p>
		<p>　　static int a,b;</p>
		<p>　　static float array[5]={1,2,3,4,5}； </p>
		<p>　　静态局部变量属于静态存储方式，它具有以下特点：</p>
		<p>　　(1)静态局部变量在函数内定义，但不象自动变量那样，当调用时就存在，退出函数时就消失。静态局部变量始终存在着，也就是说它的生存期为整个源程序。</p>
		<p>　　(2)静态局部变量的生存期虽然为整个源程序，但是其作用域仍与自动变量相同，即只能在定义该变量的函数内使用该变量。退出该函数后，尽管该变量还继续存在，但不能使用它。</p>
		<p>　　(3)允许对构造类静态局部量赋初值。若未赋以初值，则由系统自动赋以0值。</p>
		<p>　　(4)对基本类型的静态局部变量若在说明时未赋以初值，则系统自动赋予0值。而对自动变量不赋初值，则其值是不定的。 根据静态局部变量的特点， 可以看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用，但如再次调用定义它的函数时，它又可继续使用，而且保存了前次被调用后留下的值。 因此，当多次调用一个函数且要求在调用之间保留某些变量的值时，可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的，但全局变量有时会造成意外的副作用，因此仍以采用局部静态变量为宜</p>
		<p>　　2.静态全局变量</p>
		<p>　　全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式， 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序，当一个源程序由多个源文件组成时，非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域， 即只在定义该变量的源文件内有效， 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内，只能为该源文件内的函数公用，因此可以避免在其它源文件中引起错误。从以上分析可以看出， 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域，限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。应予以注意。</p>
		<p>　　静态变量</p>
		<p>　　除范围之外，变量还有存活期，在这一期间变量能够保持它们的值。在应用程序的存活期内一直保持模块级变量和公用变量的值。但是，对于 Dim 声明的局部变量以及声明局部变量的过程，仅当过程在执行时这些局部变量才存在。通常，当一个过程执行完毕，它的局部变量的值就已经不存在，而且变量所占据的内存也被释放。当下一次执行该过程时，它的所有局部变量将重新初始化。</p>
		<p>　　但可将局部变量定义成静态的，从而保留变量的值。在过程内部用 Static 关键字声明一个或多个变量，其用法和 Dim 语句完全一样：</p>
		<p>　　Static Depth</p>
		<p>　　例如，下面的函数将存储在静态变量 Accumulate 中的以前的运营总值与一个新值相加，以计算运营总值。</p>
		<p>　　Function RunningTotal (num)</p>
		<p>　　Static ApplesSold</p>
		<p>　　ApplesSold = ApplesSold + num</p>
		<p>　　RunningTotal = ApplesSold</p>
		<p>　　End Function</p>
		<p>　　如果用 Dim 而不用 Static 声明 ApplesSold，则以前的累计值不会通过调用函数保留下来，函数只会简单地返回调用它的那个相同值。</p>
		<p>　　在模块的声明段声明 ApplesSold，并使它成为模块级变量，由此也会收到同样效果。但是，这种方法一旦改变变量的范围，过程就不再对变量排他性存取。由于其它过程也可以访问和改变变量的值，所以运营总值也许不可靠，代码将更难于维护。</p>
		<p>　　声明所有的局部变量为静态变量</p>
		<p>　　为了使过程中所有的局部变量为静态变量，可在过程头的起始处加上 Static 关键字。例如：</p>
		<p>　　Static Function RunningTotal (num)</p>
		<p>　　这就使过程中的所有局部变量都变为静态，无论它们是用 Static、Dim 或 Private 声明的还是隐式声明的。可以将 Static 放在任何 Sub 或 Funtion 过程头的前面，包括事件过程和声明为 Private 的过程。</p>
		<p>
				<br />文章出处：DIY部落(<a href="http://www.diybl.com/course/3_program/vc/vc_js/20090215/155523.html">http://www.diybl.com/course/3_program/vc/vc_js/20090215/155523.html</a>)</p>
<img src ="http://www.cppblog.com/Lee/aggbug/77103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-03-19 07:28 <a href="http://www.cppblog.com/Lee/archive/2009/03/19/77103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++中static的作用</title><link>http://www.cppblog.com/Lee/archive/2009/03/19/77101.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Wed, 18 Mar 2009 22:36:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/03/19/77101.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/77101.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/03/19/77101.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/77101.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/77101.html</trackback:ping><description><![CDATA[
		<p>   1、什么是static?<br />       static 是C++中很常用的修饰符，它被用来控制变量的存储方式和可见性。</p>
		<p>    2、为什么要引入static?<br />       函数内部定义的变量，在程序执行到它的定义处时，编译器为它在栈上分配空间，大家知道，函数在栈上分配的空间在此函数执行结束时会释放掉，这样就产生了一 个问题: 如果想将函数中此变量的值保存至下一次调用时，如何实现？ 最容易想到的方法是定义一个全局的变量，但定义为一个全局变量有许多缺点，最明显的缺点是破坏了此变量的访问范围（使得在此函数中定义的变量，不仅仅受此 函数控制）。</p>
		<p>    3、什么时候用static?<br />       需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部，对外不可见。</p>
		<p>    4、static的内部机制：<br />       静态数据成员要在程序一开始运行时就必须存在。因为函数在程序运行中被调用，所以静态数据成员不能在任何函数内分配空间和初始化。<br />       这样，它的空间分配有三个可能的地方，一是作为类的外部接口的头文件，那里有类声明；二是类定义的内部实现，那里有类的成员函数定义；三是应用程序的main（）函数前的全局数据声明和定义处。<br />      静态数据成员要实际地分配空间，故不能在类的声明中定义（只能声明数据成员）。类声明只声明一个类的“尺寸和规格”，并不进行实际的内存分配，所以在类声 明中写成定义是错误的。它也不能在头文件中类声明的外部定义，因为那会造成在多个使用该类的源文件中，对其重复定义。<br />      static被引入以告知编译器，将变量存储在程序的静态存储区而非栈上空间，静态<br />数据成员按定义出现的先后顺序依次初始化，注意静态成员嵌套时，要保证所嵌套的成员已经初始化了。消除时的顺序是初始化的反顺序。</p>
		<p>    5、static的优势：<br />       可以节省内存，因为它是所有对象所公有的，因此，对多个对象来说，静态数据成员只存储一处，供所有对象共用。静态数据成员的值对每个对象都是一样，但它的 值是可以更新的。只要对静态数据成员的值更新一次，保证所有对象存取更新后的相同的值，这样可以提高时间效率。</p>
		<p>    6、引用静态数据成员时，采用如下格式：<br />         &lt;类名&gt;::&lt;静态成员名&gt;<br />    如果静态数据成员的访问权限允许的话(即public的成员)，可在程序中，按上述格式<br />来引用静态数据成员。</p>
		<p>    7、注意事项：<br />      (1)类的静态成员函数是属于整个类而非类的对象，所以它没有this指针，这就导致<br />了它仅能访问类的静态数据和静态成员函数。<br />      (2)不能将静态成员函数定义为虚函数。<br />      (3)由于静态成员声明于类中，操作于其外，所以对其取地址操作，就多少有些特殊<br />，变量地址是指向其数据类型的指针 ，函数地址类型是一个“nonmember函数指针”。</p>
		<p>      (4)由于静态成员函数没有this指针，所以就差不多等同于nonmember函数，结果就<br />产生了一个意想不到的好处：成为一个callback函数，使得我们得以将C++和C-based X W<br />indow系统结合，同时也成功的应用于线程函数身上。<br />      (5)static并没有增加程序的时空开销，相反她还缩短了子类对父类静态成员的访问<br />时间，节省了子类的内存空间。<br />      (6)静态数据成员在&lt;定义或说明&gt;时前面加关键字static。<br />      (7)静态数据成员是静态存储的，所以必须对它进行初始化。<br />      (8)静态成员初始化与一般数据成员初始化不同:<br />       初始化在类体外进行，而前面不加static，以免与一般静态变量或对象相混淆；<br />       初始化时不加该成员的访问权限控制符private，public等；<br />           初始化时使用作用域运算符来标明它所属类；<br />           所以我们得出静态数据成员初始化的格式：<br />         &lt;数据类型&gt;&lt;类名&gt;::&lt;静态数据成员名&gt;=&lt;值&gt;<br />      (9)为了防止父类的影响，可以在子类定义一个与父类相同的静态变量，以屏蔽父类的影响。这里有一点需要注意：我们说静态成员为父类和子类共享，但我们有 重复定义了静态成员，这会不会引起错误呢？不会，我们的编译器采用了一种绝妙的手法：name-mangling 用以生成唯一的标志。</p>
		<p>
		</p>
		<p>
				<strong>静态数据成员<br /><br /></strong>　　在类中，静态成员可以实现多个对象之间的数据共享，并且使用静态数据成员还不会破坏隐藏的原则，即保证了安全性。因此，静态成员是类的所有对象中共享的成员，而不是某个对象的成员。<br /><br />使用静态数据成员可以节省内存，因为它是所有对象所公有的，因此，对多个对象来说，静态数据成员只存储一处，供所有对象共用。静态数据成员的值对每个 对象都是一样，但它的值是可以更新的。只要对静态数据成员的值更新一次，保证所有对象存取更新后的相同的值，这样可以提高时间效率。<br /><br />静态数据成员的使用方法和注意事项如下：<br /><br />1、静态数据成员在定义或说明时前面加关键字static。<br /><br />2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下：<br /><br />&lt;数据类型&gt;&lt;类名&gt;::&lt;静态数据成员名&gt;=&lt;值&gt;<br /><br />这表明：<br /><br />      　　(1) 初始化在类体外进行，而前面不加static，以免与一般静态变量或对象相混淆。<br /><br />(2) 初始化时不加该成员的访问权限控制符private，public等。<br /><br />(3) 初始化时使用作用域运算符来标明它所属类，因此，静态数据成员是类的成员，而不是对象的成员。<br /><br />3、静态数据成员是静态存储的，它是静态生存期，必须对它进行初始化。<br /><br />4、引用静态数据成员时，采用如下格式：<br /><br />&lt;类名&gt;::&lt;静态成员名&gt;<br /><br />如果静态数据成员的访问权限允许的话(即public的成员)，可在程序中，按上述格式来引用静态数据成员。</p>
		<p>
				<strong>静态成员函数<br /><br /></strong>　　静态成员函数和静态数据成员一样，它们都属于类的静态成员，它们都不是对象成员。因此，对静态成员的引用不需要用对象名。<br /><br />在静态成员函数的实现中不能直接引用类中说明的非静态成员，可以引用类中说明的静态成员。如果静态成员函数中要引用非静态成员时，可通过对象来引用。</p>
		<p>
				<br />下面看一个例子：<br />#include &lt;iostream.h&gt;<br />class Point<br />{<br />public:<br />void output()<br />{<br />}<br />static void init()<br />{  <br />} <br />};<br />void main( void )<br />{<br />Point pt;<br />pt.init();<br />pt.output(); <br />}<br />这样编译是不会有任何错误的。<br />下面这样看<br />#include &lt;iostream.h&gt;<br />class Point<br />{<br />public:<br />void output()<br />{  <br />}<br />static void init()<br />{  <br />} <br />};<br />void main( void )<br />{<br />Point::output();<br />}<br />这样编译会处错，错误信息：<a name="baidusnap0"></a><strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">illegal</strong><a name="baidusnap1"></a><strong style="COLOR: black; BACKGROUND-COLOR: rgb(160,255,255)">call</strong><a name="baidusnap2"></a><strong style="COLOR: black; BACKGROUND-COLOR: rgb(153,255,153)">of</strong><a name="baidusnap3"></a><strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,153,153)">non-static</strong><a name="baidusnap6"></a><strong style="COLOR: white; BACKGROUND-COLOR: rgb(0,170,0)">member</strong><a name="baidusnap7"></a><strong style="COLOR: white; BACKGROUND-COLOR: rgb(136,104,0)">function</strong>，为什么？<br />因为在没有实例化一个类的具体对象时，类是没有被分配内存空间的。<br />好的再看看下面的例子:<br />#include &lt;iostream.h&gt;<br />class Point<br />{<br />public:<br />void output()<br />{  <br />}<br />static void init()<br />{  <br />} <br />};<br />void main( void )<br />{<br />Point::init();<br />}<br />这时编译就不会有错误，因为在类的定义时，它静态数据和成员函数就有了它的内存区，它不属于类的任何一个具体对象。<br />好的再看看下面的例子:<br />#include &lt;iostream.h&gt;<br />class Point<br />{<br />public:<br />void output()<br />{  <br />}<br />static void init()<br />{ <br />   x = 0;<br />   y = 0;<br />}<br />private:<br />int x;<br />int y;<br />};<br />void main( void )<br />{<br />Point::init();<br />}<br />编译出错：<br /><strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">illegal</strong> reference to data <strong style="COLOR: white; BACKGROUND-COLOR: rgb(0,170,0)">member</strong> 'Point::x' in a static <strong style="COLOR: white; BACKGROUND-COLOR: rgb(0,170,0)">member</strong><strong style="COLOR: white; BACKGROUND-COLOR: rgb(136,104,0)">function</strong><br /><strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">illegal</strong> reference to data <strong style="COLOR: white; BACKGROUND-COLOR: rgb(0,170,0)">member</strong> 'Point::y' in a static <strong style="COLOR: white; BACKGROUND-COLOR: rgb(0,170,0)">member</strong><strong style="COLOR: white; BACKGROUND-COLOR: rgb(136,104,0)">function</strong><br />在一个静态成员函数里错误的引用了数据成员，<br />还是那个问题，静态成员（函数），不属于任何一个具体的对象，那么在类的具体对象声明之前就已经有了内存区，<br />而现在非静态数据成员还没有分配内存空间，那么这里调用就错误了，就好像没有声明一个变量却提前使用它一样。<br />也就是说在静态成员函数中不能引用非静态的成员变量。<br />好的再看看下面的例子:<br />#include &lt;iostream.h&gt;<br />class Point<br />{<br />public:<br />void output()<br />{<br />   x = 0;<br />   y = 0;<br />   init();  <br />}<br />static void init()<br />{</p>
		<p>}<br />private:<br />int x;<br />int y;<br />};<br />void main( void )<br />{<br />Point::init();<br />}<br />好的，这样就不会有任何错误。这最终还是一个内存模型的问题，<br />任何变量在内存中有了自己的空间后，在其他地方才能被调用，否则就会出错。<br />好的再看看下面的例子:<br />#include &lt;iostream.h&gt;<br />class Point<br />{<br />public:<br />void output()<br />{ <br />}<br />static void init()<br />{ <br />   x = 0;<br />   y = 0;<br />}<br />private:<br />static int x;<br />static int y;<br />};<br />void main( void )<br />{<br />Point::init();<br />}<br />编译：<br />Linking...<br />test.obj : error LNK2001: unresolved external symbol "private: static int Point::y" <br />test.obj : error LNK2001: unresolved external symbol "private: static int Point::x" <br />Debug/Test.exe : fatal error LNK1120: 2 unresolved externals<br />执行 link.exe 时出错.<br />可以看到编译没有错误，连接错误，这又是为什么呢？<br />这是因为静态的成员变量要进行初始化，可以这样：<br />#include &lt;iostream.h&gt;////////////////////////(这段代码还有疑问，init()中的x, y 和static 的x ,y 有联系吗？)<br />class Point<br />{<br />public:<br />void output()<br />{ <br />}<br />static void init()<br />{ <br />   x = 0;<br />   y = 0;<br />}<br />private:<br />static int x;<br />static int y;<br />};<br />int Point::x = 0;<br />int Point::y = 0;<br />void main( void )<br />{<br />Point::init();<br />}<br />在静态成员数据变量初始化之后就不会出现编译错误了。<br />再看看下面的代码：<br />#include &lt;iostream.h&gt;<br />class Point<br />{<br />public:<br />void output()<br />{ <br />}<br />static void init()<br />{ <br />   x = 0;<br />   y = 0;<br />}<br />private:<br />static int x;<br />static int y;<br />};<br />void main( void )<br />{<br />}<br />编译没有错误，为什么？<br />即使他们没有初始化，因为我们没有访问x，y，所以编译不会出错。  </p>
		<p>
		</p>
		<p>
				<font size="2">C++会区分两种类型的成员函数：静态成员函数和非静态成员函数。这两者之间的一个重大区别是，静态成员函数不接受隐含的<em>this</em>自变量。所以，它就无法访问自己类的非静态成员。</font>
		</p>
		<p>
				<font size="2">在某些条件下，比如说在使用诸如pthread（它不支持类）此类的多线程库时，就必须使用静态的成员函数，因为其地址同C语言函数的地址兼容。这种铜限制就迫使程序员要利用各种解决办法才能够从静态成员函数访问到非静态数据成员。</font>
		</p>
		<p>
				<font size="2">第一个解决办法是声明类的所有数据成员都是静态的。运用这种方式的话，静态的成员函数就能够直接地访问它们，例如：</font>
		</p>
		<p>
				<font size="2">
						<font color="#0066ff">class Singleton<br />{<br />public:<br />   static Singleton * instance();<br />private:<br />   Singleton * p;<br />   static Lock lock;<br />};</font>
						<br />
						<br />
				</font>
				<font color="#0066ff" size="2">Singleton * Singleton::instance()<br />{<br />lock.getlock(); <font color="#006600">// fine, lock is static</font><br />if (!p)<br />   p=new Singleton;<br />lock.unlock();<br />return p;<br />} </font>
		</p>
		<p>
				<font size="2">这种解决方法不适用于需要使用非静态数据成员的类。</font>
		</p>
		<p>
				<font size="2">访问非静态数据成员</font>
		</p>
		<p>
				<font size="2">将参照传递给需要考量的对象能够让静态的成员函数访问到对象的非静态数据：</font>
		</p>
		<p>
				<font color="#0066ff" size="2">class A<br />{<br />public:<br />   static void func(A &amp; obj);<br />   intgetval() const; <font color="#006600">//<strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,153,153)">non-static</strong><strong style="COLOR: white; BACKGROUND-COLOR: rgb(0,170,0)">member</strong><strong style="COLOR: white; BACKGROUND-COLOR: rgb(136,104,0)">function</strong></font><br />private:<br />intval;<br />}; </font>
		</p>
		<p>
				<font size="2">静态成员函数func()会使用参照<em>obj</em>来访问非静态成员<em>val</em>。</font>
		</p>
		<p>
				<font color="#0066ff" size="2">voidA::func(A &amp; obj)<br />{<br />   int n = obj.getval();<br />} </font>
		</p>
		<p>
				<font size="2">将一个参照或者指针作为静态成员函数的自变量传递，就是在模仿自动传递非静态成员函数里<em>this</em>自变量这一行为。</font>
		</p>
<img src ="http://www.cppblog.com/Lee/aggbug/77101.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-03-19 06:36 <a href="http://www.cppblog.com/Lee/archive/2009/03/19/77101.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>默认生成的函数和屏蔽它们的方法</title><link>http://www.cppblog.com/Lee/archive/2009/03/19/77100.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Wed, 18 Mar 2009 21:17:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/03/19/77100.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/77100.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/03/19/77100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/77100.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/77100.html</trackback:ping><description><![CDATA[如果你只是声明一个空类，不做任何事情的话，编译器会自动为你生成一个默认构造函数、一个拷贝默认构造函数、一个默认拷贝赋值操作符和一个默认析构函数。<font color="#008080"><strong>这些函数只有在第一次被调用时，才会别编译器创建。所有这些函数都是inline和public的。</strong></font><br /><br /><font color="#008080"><strong>默认的析构函数是非虚函数</strong></font>（除非基类有自己声明的虚析构函数）。<font color="#008080"><strong>而拷贝默认构造函数和默认拷贝赋值操作符知识是单纯将来源对象的每一个非静态成员拷贝到对象目标中（bitwise copy）。</strong></font><br /><br />其中的默认拷贝赋值操作符只有在生成的代码合法并且有机会证明它有意义存在时才会生成。这就说明，<font color="#008080"><strong>如果你打算在一个“内含引用成员”或者“内含const成员”的类内支持赋值操作，就必须定义自己的默认拷贝赋值操作符。</strong></font>因为C++本身不允许引用改指不同的对象，也不允许更改const成员。<br /><br />最后一种情况，<font color="#008080"><strong>当基类将自己的默认拷贝赋值操作符声明为private时，子类就不会产生自己的的默认拷贝赋值操作符。</strong></font>因为假如产生了这样的默认拷贝赋值操作符，它会试着去调用基类的默认拷贝赋值操作符去处理基类的部分，不幸的是，它没有权利。<br /><br />你可以将拷贝构造函数或默认拷贝赋值操作符声明为private。这样明确声明一个成员函数，就阻止了编译器暗自创建的默认版本，而这些函数为private，使得可以成功阻止人们调用它。<br /><br />上面的做法有一个隐患，因为类自身的member和friend还是可以调用这些private函数。有一个很刁钻的方法，“<font color="#008080"><strong>将成员函数声明为private而且故意不实现它们</strong></font>”，这样既阻止了默认函数的生成，而且如果你试着调用这些函数，就会得到一个链接错误。只声明，不定义，链接器报错。甚至在声明的时候，你连参数也不用写。<br /><br />而试着将上述的链接器错误提前到编译器也是可以的。我们专门设计一个类Unconpyable。<br />--------------------------------------------------------------------<br />class Uncopybale {<br />protected:<br />    Uncopyable() {}<br />    ~Uncopyable() {}<br />private:<br />    Ucopyable(const Uncopyable&amp;)<br />    Uncopyable&amp; operator=(const Uncopyable&amp;)<br />};<br />--------------------------------------------------------------------<br />为了阻止对象被拷贝，<font color="#008080"><strong>我们唯一需要做的就是继承Uncopyable</strong></font>。这些函数的默认生成版本会尝试调用其基类的对应版本，那些调用会被编译器拒绝，因为它基类的拷贝函数是private。<br /><br />Boost提供的noncopyable类也有类似的功能。<br /><br /><font style="BACKGROUND-COLOR: rgb(0,128,128)" color="#ffffff"><strong>忠告：<br /><br />为了驳回编译器自动提供的技能，可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的基类也是一种做法。</strong></font><img src ="http://www.cppblog.com/Lee/aggbug/77100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-03-19 05:17 <a href="http://www.cppblog.com/Lee/archive/2009/03/19/77100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>摘抄</title><link>http://www.cppblog.com/Lee/archive/2009/03/18/77064.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Wed, 18 Mar 2009 12:45:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/03/18/77064.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/77064.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/03/18/77064.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/77064.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/77064.html</trackback:ping><description><![CDATA[一直很喜欢电影《六楼后座》里的一段台词：“青春犹如方塘，有棱角的，易碎的，荒唐的，甜蜜的；有种甜蜜要用亲身用舌间能量才能融化，才能品尝。你总不能隔岸观火，人生总有这样一个阶段；一个做什么都快乐的阶段，一个说什么也真诚的阶段。他们可笑也可爱。笑他们皆因我们都曾经荒唐过，爱他们皆因我们也曾甜蜜过。”<img src ="http://www.cppblog.com/Lee/aggbug/77064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-03-18 20:45 <a href="http://www.cppblog.com/Lee/archive/2009/03/18/77064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux和unix的区别（转）</title><link>http://www.cppblog.com/Lee/archive/2009/03/15/76690.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Sun, 15 Mar 2009 13:43:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/03/15/76690.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/76690.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/03/15/76690.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/76690.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/76690.html</trackback:ping><description><![CDATA[
		<div class="textcontent" id="cl441993">
				<font size="4">Linux 的源头要追溯到最古老的UNIX。1969年，Bell实验室的Ken Thompson开始利用一台闲置的 PDP-7计算机开发了一种多用户，多任务操作系统。很快，Dennis Richie加入了这个项目，在他们共同努力下诞生了最早的UNIX。Richie受一个更早的项目——MULTICS的启发，将此操作系统命名为 Unix。早期UNIX是用汇编语言编写的，但其第三个版本用一种崭新的编程语言C重新设计了。C是Richie设计出来并用于编写操作系统的程序语言。通过这次重新编写，Unix得以移植到更为强大的 DEC PDP-11/45与11/70计算机上运行。后来发生的一切，正如他们所说，已经成为历史。Unix从实验室走出来并成为了操作系统的主流，现在几乎每个主要的计算机厂商都有其自有版本的Unix.<br /><br />Linux起源于一个学生的简单需求。Linus Torvalds,Linux的作者与主要维护者，在其上大学时所买得起的唯一软件是Minix. Minix是一个类似Unix，被广泛用来辅助教学的简单操作系统。Linus 对Minix不是很满意，于是决定自己编写软件。他以学生时代熟悉的Unix作为原型， 在一台Intel 386 PC上开始了他的工作。他的进展很快，受工作成绩的鼓舞，他将这项成果通过互连网与其他同学共享，主要用于学术领域。有人看到了这个软件并开始分发。每当出现新问题时，有人会立刻找到解决办法并加入其中，很快的， Linux成为了一个操作系统。值得注意的是Linux并没有包括Unix源码。它是按照公开的POSIX标准重新编写的。Linux大量使用了由麻省剑桥免费软件基金的GNU软件，同时Linux自身也是用它们构造而成。<br /><br /><br />另外两大区别：<br />1） UNIX系统大多是与硬件配套的，而Linux则可运行在多种硬件平台上.<br />2） UNIX是商业软件，而Linux是自由软件，免费、公开源代码的.<br />UNIX(5万美圆)而Linux免费 <br /></font>
		</div>
<img src ="http://www.cppblog.com/Lee/aggbug/76690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-03-15 21:43 <a href="http://www.cppblog.com/Lee/archive/2009/03/15/76690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C/C++ 标准编程 之 类型转换</title><link>http://www.cppblog.com/Lee/archive/2009/03/09/76028.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Mon, 09 Mar 2009 13:34:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/03/09/76028.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/76028.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/03/09/76028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/76028.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/76028.html</trackback:ping><description><![CDATA[
		<span class="pg" id="xydwtext"> 
<p><font size="3"><strong>一、自动类型转换</strong></font></p><p>    一般来说，同一句语句或表达式应该使用同一种类型的变量和常量。如果使用了多种类型的变量和常量（类型混用），C 会自动把它们转换成同一种类型。自动类型转换为我们写程序提供了方便，却也带来了危机。因粗心大意而造成的类型混用也许会导致程序运行出错。以下是自动类型转换的基本规则：</p><p>    <font color="#ff0000"><strong>1.</strong></font> 在表达式中，char 和 short 类型的值，无论有符号还是无符号，都会自动转换成 int 或者 unsigned int（如果 short 的大小和 int 一样，unsigned short 可表示的最大值就大于 int，在这种情况下，unsigned short 被转换成 unsigned int）。因为它们被转换成表示范围更大的类型，故而我们把这种转换称之为“<strong>升级</strong>（<font color="#990000">promotion</font>）”。</p><p>    <font color="#ff0000"><strong>2.</strong></font> 按照从高到低的顺序给各种数据类型分等级，依次为：long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和 int。这里有一个小小的例外，如果 long 和 int 大小相同，则 unsigned int 的等级应位于 long 之上。char 和 short 并没有出现于这个等级列表，是因为它们参与运算时就应该已经被升级成了 int 或者 unsigned int。</p><p>    <font color="#ff0000"><strong>3.</strong></font> 在任何涉及两种数据类型的操作中，它们之间等级较低的类型会被转换成等级较高的类型。</p><p>    <font color="#ff0000"><strong>4.</strong></font> 在赋值语句中，= 右边的值在赋予 = 左边的变量之前，首先要将右边的值的数据类型转换成左边变量的类型。也就是说，左边变量是什么数据类型，右边的值就要转换成什么数据类型的值。这个过程可能导致右边的值的类型升级，也可能导致其类型<strong>降级</strong>（<font color="#990000">demotion</font>）。所谓“降级”，是指等级较高的类型被转换成等级较低的类型。</p><p>    <font color="#ff0000"><strong>5.</strong></font> 作为参数传递给函数时，char 和 short 会被转换成 int，float 会被转换成 double。使用函数原型可以避免这种自动升级。这点我以后会详细讲解。</p><p>    类型升级通常不会有什么问题，但是类型降级却会带来不少问题。例如：</p><p>        char ch = 1222;</p><p>1222 降级为 char，但 char 无法表示 1222。再如：</p><p>        int j = 22.2;</p><p>22.2 降级为 int，小数部分被截断。</p><p><br /><font size="3"><strong>二、类型转换运算符</strong></font></p><p>    使用类型转换运算符可以指定我们想要进行的类型转换。类型转换运算符由括号和类型名组成：</p><p>        (type)</p><p>其中，我们应该用我们想转换成的类型替换掉 type，例如：(long), (unsigned long)。</p><p>    类型转换运算符应该放在值的前面：</p><p>        int i = (int)1.1 + (int)2.2;</p><p>1.1 在加法运算前就因为类型转换运算符而降级为 int，其值变为 1。类似地，2.2 也降级为 int，其值变为 2。又如：</p><p>        int j = 20;<br />        double k = (double)j;</p><p>j 的值被转换成 double，然后用于初始化 k。</p><p><br /><font size="3"><strong>三、小例子</strong></font></p><p>    #include <b>&lt;</b>stdio.h<b>&gt;</b></p><p>    int main(void)<br />    {<br />        char ch;<br />        int i;<br />        float fl;<br />        double db;</p><p>        db = fl = i = ch = 'C';                 /* 10 */<br />        printf("ch=%c, i=%d, fl=%2.2f, db=%2.2f\n", ch, i, fl, db);</p><p>        ch = ch + 1;                            /* 13 */<br />        i = db + fl + 2 * ch;                   /* 14 */<br />        fl = 2.0 * ch + i;                      /* 15 */<br />        db = 22 * i + ch - fl;                  /* 16 */<br />        printf("ch=%c, i=%d, fl=%2.2f, db=%2.2f\n", ch, i, fl, db);</p><p>        i = 666.6 + 777.7;                      /* 19 */<br />        printf("Now i = %d\n", i);<br />        i = (int)666.6 + (int)777.7;            /* 21 */<br />        printf("Now i = %d\n", i);</p><p>        return 0;<br />    }</p><p>我的系统中，char 是 8 位的，int 是 32 位的。输出为：</p><p>    ch=C, i=67, fl=67.00, db=67.00<br />    ch=D, i=270, fl=406.00, db=5602.00<br />    Now i = 1444<br />    Now i = 1443</p><p>第 10 行，'C' 的值被转换为 char，然后赋值给 ch。ch 的值被转换成 int，然后赋值给 i。以此类推。</p><p>第 13 行，= 右边的 ch 的值先被转换成 int，然后和 1 相加，得到 32 位的 int 类型整数 68。最后，68 降级为 char，然后赋值给 ch。在 ASCII 中，D 的编码是 68。</p><p>第 14 行，ch 的值被转换成 int，然后和 2 相乘得 136。fl 的值被转换成 double，然后和 db 相加，其和再与转换成 double 的 136 相加得 270.0 。最后，270.0 被转换成 int，然后赋值给 i。</p><p>第 15 行，ch 的值被转换成 double，然后和 2.0 相乘，i 的值被转换成 double，然后和前面得到的乘积相加，相加的得数被转换成 float，然后赋值给 fl。</p><p>第 16 行，22 和 i 相乘得 5940，ch 的值被转换成 int，然后和 5940 相加得 6008，然后，6008 被转换成 float，再和 fl 相减得 5602.0f，最后 5602.0f 被转换成 double，再赋值给 db。</p><p>第 19 行，666.6 和 777.7 相加得 1444.3，然后 1444.3 被降级成 int，再赋值给 i。</p><p>第 21 行，类型转换运算符把 666.6 和 777.7 转换为 int，得 666 和 777，它们相加得 1443，最后，1443 被赋值给 i。</p><p>注意，<font color="#ff0000">类型转换改变的是值的类型，而不是对象的类型，对象的类型自始至终都是不变的</font>。例如：</p><p>    i = fl + ch;</p><p>ch 的值被转换成 float，而 ch 本身仍然是 char 类型的变量。</p><p><strong>参考资料</strong>：C Primer 5th Edition<br />          The C Programming Language 2nd Edition<br />          C99 标准</p><!----></span>
<img src ="http://www.cppblog.com/Lee/aggbug/76028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-03-09 21:34 <a href="http://www.cppblog.com/Lee/archive/2009/03/09/76028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试题分析总结</title><link>http://www.cppblog.com/Lee/archive/2009/03/09/76022.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Mon, 09 Mar 2009 12:42:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/03/09/76022.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/76022.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/03/09/76022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/76022.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/76022.html</trackback:ping><description><![CDATA[
		<p>#include "stdafx.h"<br />#include &lt;iostream&gt;<br />using namespace std;<br />//void GetMemory(char **p, int num)<br />//{<br />// *p = (char *)malloc(num);<br />//}<br />//void Test(void)<br />//{<br />// char *str = NULL;<br />// GetMemory(&amp;str, 100);<br />// strcpy(str, "hello");<br />// printf(str);<br />//}<br />////////////////////////////////////////////////////////<br />//void Test(void)<br />//{<br />// char *str = (char *) malloc(100);<br />// strcpy(str, "hello");<br />// free(str);<br />// delete str;<br />// if(str != NULL)<br />// {<br />//  strcpy(str, "world");<br />//  printf(str);<br />// }<br />//}</p>
		<p>
				<br />//delete只是释放内存，不修改指针变量的值 <br />//你需要自己去设置 str=NULL <br />//delete释放了堆上面的内存，str是栈上的指针变量 <br />//在void Test(void)函数中，我们只能手动改变str的值，而无法手动释放指针的内存<br />//当void Test(void)函数退出时，str本身的内存才释放掉<br />/////////////////////////////////////////////////////////<br />char *GetMemory(void)<br />{<br /> char p[] = "hello world";<br /> return p;<br />}<br />void Test(void)<br />{<br /> char *str = NULL;<br /> str = GetMemory();<br /> printf(str);<br />}<br />//////////////////////////////////////////////////////////////////////////<br />int _tmain(int argc, _TCHAR* argv[])<br />{<br /> Test();<br /> getchar();<br /> return 0;<br />}</p>
		<p>用指针动态分配一段内存空间，指针指向的是这段内存的首地址，同样的释放也只是释放这个指针指向的首地址，也就是说delete str只是释放了第一个字母h的内存空间。<br /></p>
<img src ="http://www.cppblog.com/Lee/aggbug/76022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-03-09 20:42 <a href="http://www.cppblog.com/Lee/archive/2009/03/09/76022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>new/delete 和malloc/free 的区别（综合转帖）</title><link>http://www.cppblog.com/Lee/archive/2009/03/09/75990.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Mon, 09 Mar 2009 08:18:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/03/09/75990.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/75990.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/03/09/75990.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/75990.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/75990.html</trackback:ping><description><![CDATA[
		<p>
				<strong>相同点</strong>：都可用于申请动态内存和释放内存</p>
		<p>
				<strong>不同点</strong>：<br />(<strong>1)操作对象有所不同</strong>。<br />malloc与free是C++/C 语言的标准库函数，new/delete 是C++的运算符。对于非内部数据类的对象而言，光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数， 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符，不在编译器控制权限之内，不能够把执行构造函数和析构函数的任务强加malloc/free。</p>
		<p>
				<strong>(2)在用法上也有所不同</strong>。<br />函数malloc 的原型如下：<br /><strong>void * malloc(size_t size);</strong><br />用malloc 申请一块长度为length 的整数类型的内存，程序如下：<br />int *p = (int *) malloc(sizeof(int) * length);<br />我们应当把注意力集中在两个要素上：“类型转换”和“sizeof”。<br />􀂋 malloc 返回值的类型是void *，所以在调用malloc 时要显式地进行类型转换，将void * 转换成所需要的指针类型。<br />􀂋 malloc 函数本身并不识别要申请的内存是什么类型，它只关心内存的总字节数。</p>
		<p>函数free 的原型如下：<br /><strong>void free( void * memblock );</strong><br />为什么free 函数不象malloc 函数那样复杂呢？这是因为指针p 的类型以及它所指的内存的容量事先都是知道的，语句free(p)能正确地释放内存。如果p 是NULL 指针，那么free </p>
		<p>对p 无论操作多少次都不会出问题。如果p 不是NULL 指针，那么free 对p连续操作两次就会导致程序运行错误。</p>
		<p>
				<strong>new/delete 的使用要点<br /></strong>运算符new 使用起来要比函数malloc 简单得多，例如：<br />int *p1 = (int *)malloc(sizeof(int) * length);<br />int *p2 = new int[length];<br />这是因为new 内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言，new 在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数，那么new 的语句也可以有多种形式。</p>
		<p>如果用new 创建对象数组，那么只能使用对象的无参数构造函数。例如<br />Obj *objects = new Obj[100]; // 创建100 个动态对象<br />不能写成<br />Obj *objects = new Obj[100](1);// 创建100 个动态对象的同时赋初值1<br />在用delete 释放对象数组时，留意不要丢了符号‘[]’。例如<br />delete []objects; // 正确的用法<br />delete objects; // 错误的用法<br />后者相当于delete objects[0]，漏掉了另外99 个对象。<br />/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br /><br /><br />1  new自动计算需要分配的空间，而malloc需要手工计算字节数<br />2  new是类型安全的，而malloc不是，比如：<br />int* p = new float[2]; // 编译时指出错误<br />int* p = malloc(2*sizeof(float)); // 编译时无法指出错误<br />new operator 由两步构成，分别是 operator new 和 construct<br />3  operator new对应于malloc，但operator new可以重载，可以自定义内存分配策略，甚至不做内存分配，甚至分配到非内存设备上。而malloc无能为力<br />4  new将调用constructor，而malloc不能；delete将调用destructor，而free不能。<br />5  malloc/free要库文件支持，new/delete则不要。 <br />/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br /><br />1. 本质区别<br />malloc/free是C/C++语言的标准库函数，new/delete是C++的运算符。<br />对于用户自定义的对象而言，用maloc/free无法满足动态管理对象的要求。对象在创建的同时要自动执行构造函数，对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符，不在编译器控制权限之内，不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++需要一个能完成动态内存分配和初始化工作的运算符new，以及一个能完成清理与释放内存工作的运算符delete。<br /><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: #0000ff">class</span>
				<span style="COLOR: #000000"> Obj<br />{<br /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> :<br />      Obj(</span>
				<span style="COLOR: #000000">) { cout </span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000"> “Initialization” </span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000"> endl; }<br />      </span>
				<span style="COLOR: #000000">~</span>
				<span style="COLOR: #000000">Obj(</span>
				<span style="COLOR: #000000">) { cout </span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000"> “Destroy” </span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000"> endl; }<br />      </span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> Initialize(</span>
				<span style="COLOR: #000000">) { cout </span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000"> “Initialization” </span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000"> endl; }<br />      </span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> Destroy(</span>
				<span style="COLOR: #000000">) { cout </span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000"> “Destroy” </span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000"> endl; }<br />};<br /><br /></span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> UseMallocFree(</span>
				<span style="COLOR: #000000">)<br />{<br />      Obj  </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">a </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> (obj </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">) malloc( </span>
				<span style="COLOR: #0000ff">sizeof</span>
				<span style="COLOR: #000000">( obj ) );     </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> allocate memory</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">      a</span>
				<span style="COLOR: #000000">-&gt;</span>
				<span style="COLOR: #000000">Initialize();                                                </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> initialization<br />      </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">…</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">      a</span>
				<span style="COLOR: #000000">-&gt;</span>
				<span style="COLOR: #000000">Destroy();   </span>
				<span style="COLOR: #008000">                                             // deconstruction</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">      free(a);                                                           <font color="#008000">// release memory<br /></font></span>
				<span style="COLOR: #000000">}<br /><br /></span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> UseNewDelete(</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000">)<br />{<br />    Obj  </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">a </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Obj;  </span>
				<span style="COLOR: #008000">                                       </span>
				<span style="COLOR: #008000">
						<br />    </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">…</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">    delete a;</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">}</span>
		</div>
		<p>
				<br />类Obj的函数Initialize实现了构造函数的功能，函数Destroy实现了析构函数的功能。函数UseMallocFree中，由于malloc/free不能执行构造函数与析构函数，必须调用成员函数Initialize和Destroy来完成“构造”与“析构”。所以我们不要用malloc/free来完成动态对象的内存管理，应该用new/delete。由于内部数据类型的“对象”没有构造与析构的过程，对它们而言malloc/free和new/delete是等价的。<br /><br />2. 联系<br />既然new/delete的功能完全覆盖了malloc/free，为什么C++还保留malloc/free呢？因为C++程序经常要调用C函数，而C程序只能用malloc/free管理动态内存。如果用free释放“new创建的动态对象”，那么该对象因无法执行析构函数而可能导致程序出错。如果用delete释放“malloc申请的动态内存”，理论上讲程序不会出错，但是该程序的可读性很差。所以new/delete，malloc/free必须配对使用。<br />///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br /><br /><br /></p>
<img src ="http://www.cppblog.com/Lee/aggbug/75990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-03-09 16:18 <a href="http://www.cppblog.com/Lee/archive/2009/03/09/75990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>司马懿的人生规划(转贴)</title><link>http://www.cppblog.com/Lee/archive/2009/03/07/75802.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Fri, 06 Mar 2009 23:19:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/03/07/75802.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/75802.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/03/07/75802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/75802.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/75802.html</trackback:ping><description><![CDATA[
		<font size="4">什么是人生规划？是指一个人结合自身实际情况，根据眼前的机遇和制约因素，积极主动地确立自己的事业</font>
		<a onclick="javascript:tagshow(event, '%B7%A2%D5%B9');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font size="4">发展</font>
						</strong>
				</u>
		</a>
		<font size="4">方向、奋斗目标，然后为达到这一目标而确定行动时间和行动方案。<br />　　人生规划的正确与否，直接关系到一个人毕生的成败。而在生存竞争激烈的时代，一个人是否具有正确的人生规划以立身处世，就显得尤为重要。</font>
		<a onclick="javascript:tagshow(event, '%C0%FA%CA%B7');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font size="4">历史</font>
						</strong>
				</u>
		</a>
		<font size="4">上的魏、蜀、吴三国时期，就是一个生存竞争非常激烈的时代，“智者恃谋而立身，勇者恃力而行道”，能够脱颖而出、名垂青史的，如贾诩、荀攸、诸葛亮等人，都是正确把握了自己人生规划的高手。但三国群雄之中，称得上把自己的人生规划做得最完美最精彩的，笔者认为非魏国的</font>
		<a onclick="javascript:tagshow(event, '%CB%BE%C2%ED%DC%B2');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font size="4">司马懿</font>
						</strong>
				</u>
		</a>
		<font size="4">莫属。<br />　　司马懿是三国历史上一个至关重要的人物。如果没有他，三国纷争的历史大概不会那么快就结束，也许还会再演绎数十年；如果没有他，大晋王朝顺应民心的统一大业，也不可能那么水到渠成、来得轻轻巧巧。是他，上承魏之强盛，下启晋之统一，成就了秦皇汉帝那样的丰功伟业，将天下万民从乱世争战之中解救出来。所以，他堪称“命世之英，非常之雄”。<br />非常之人，必有非常之处。《晋书》上称司马懿“少有奇节，聪明多大略，博学洽闻，伏膺儒教。汉末大乱，常慨然有忧天下心”。在笔者看来，最能凸现司马懿善于规划自己人生的，便在“聪明多大略”五个字上。以史书资料为依据，让我们来看一看司马懿是如何施展他的聪明才智来进行人生规划的。<br />　　古人云：“良禽择木而栖，贤臣择主而事”。在封建</font>
		<a onclick="javascript:tagshow(event, '%C9%E7%BB%E1');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font size="4">社会</font>
						</strong>
				</u>
		</a>
		<font size="4">，一个人事业上的建树，主要在政治、军事方面；而在政治、军事方面有所建树，则全凭个人与上级的关系如何。所以，根据司马懿辅佐的四个君主，可以大致将他的人生规划分为四个阶段：魏武帝时期、魏文帝时期、魏明帝时期、魏少帝曹芳时期。而我们就可以从这四个时期分阶段来观察司马懿的人生规划。<br />　　一、魏武帝时期<br />　　首先，我们有必要了解一下魏武帝曹操的个性特色与为政风格。史书上称曹操“知人善察，难眩以伪，创造大业，文武并施”，同时又“持法峻刻，诸将有计谋胜出己者，随以法诛之，及故人旧怨，亦皆无余。”是一个名副其实的“雄猜之主”。<br />　　另外，曹操在自己的用人导向上存在着严重的“既重才，又忌才；既用人，又疑人”的双重性。他很看重部下的才能和实力，但又不允许部下的才能与实力超出他和他的后人的可驾驭范围。《三国志》上记载了这样一个事例：荆州少年周不疑，年十七，少有异才，聪明敏达，曹操欲以女妻之，周不疑不敢当。曹操爱子曹冲，亦有过人之智，可与周不疑相比。后曹冲病死，曹操心忌周不疑，欲除之。曹丕以为不可，曹操曰：“此人非汝所能驾御也。”遂遣刺客杀之。这一事例，完全证明了曹操用人路线的“双重取向”。<br />　　司马懿对曹操这种用人导向是认识得很深刻的。当年他出山任职时因不满曹操挟天子而令诸侯的叛臣行径，“知汉运方微，不欲屈节曹氏”，在曹操慕其名想把他收罗到帐下时，他假扮患“风痹”之症作为推辞的理由，并且还以“坚卧不动”的高超演技骗过了曹操派来刺探虚实的人。但骗得了一时，骗不过一世。曹操当了丞相之后，再次敦请司马懿出仕，而且明确地发出了“若复盘桓，便收之”的威胁。这时候的司马懿，自知不足以与权势显赫的曹操相抗衡，只得“惧而就职”。君己无礼于先，臣又怎能忠事于后？！显而易见，在这种极其被动的情况下，司马懿虽已加入到曹操阵营之中，却很难马上发挥其过人的抱负与谋略。<br /><br />即便进了丞相府，司马懿也是很不安全的。《晋书》上记载：“魏武察帝(指司马懿)有雄豪志，闻有狼顾相。欲验之，乃召使前行，令反顾，面正向后而身不动。又尝梦三马同食一槽，甚恶焉。因谓太子丕曰：‘司马懿非人臣，也必预汝家事。’”可见，曹操对他的猜忌之深，达到了“必欲除之而后快”的地步。<br />　　司马懿这时的人生规划第一个重点便是“韬光养晦，瞻前顾后，明哲保身”。他决定用自己的务实和苦干换取曹操的信任，“于是勤于吏职，夜以忘寝，至于刍牧之间，悉皆临履，由是魏武意遂安”。是啊，任何一位君主，看到有这样公而忘私、废寝忘食、尽心尽力的臣子为自己效忠，又怎会产生叵测之心以制之？曹操在最后终于接受了司马懿的效忠，并对他进行了提升，所以他能从当初刚入丞相府的“文学掾”(文牍之官)一直做到丞相府主簿(相当于现在的国务院秘书长)。<br />        但在明哲保身的同时，司马懿丝毫也没有放松对自己的历练。这是他这段时期人生规划的第二个重点。他在当时的丞相府中找到了两个榜样——荀彧和曹操。应该说，在丞相府的历练过程中，他时时处处都在学习这两个榜样的长处。但司马懿注意到了这一点：荀彧作为高明的谋略家，他的长处仅仅局限于运筹帷幄之中，</font>
		<a onclick="javascript:tagshow(event, '%B7%A2%D5%B9');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font color="#176209" size="4">发展</font>
						</strong>
				</u>
		</a>
		<font size="4">的空间太狭窄，始终只能隐在幕后，而无法驰骋疆场，登上</font>
		<a onclick="javascript:tagshow(event, '%C0%FA%CA%B7');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font color="#176209" size="4">历史</font>
						</strong>
				</u>
		</a>
		<font size="4">的大舞台。而曹操不同，他就是一个“能谋能战”的大枭雄，他的发展空间就比荀彧更广阔。从注意到这一点开始，素怀“治国平天下”大志的司马懿学会了有计划、有步骤的自我锻炼，使自己逐步完善成为集曹操、荀彧二者之长于一体的“文武双全、出将入相”的真正强者。<br />　　最后，我们来谈司马懿在魏武帝时期人生规划中，最重要也是最精彩的一笔了——扶助曹丕成为太子。《晋书》上讲他：“魏国既建，迁太子中庶子。每与大谋，辄有奇策，为太子所信重。”儒家学说里讲：“己欲立而先立人，己欲达而先达人”，司马懿为了摆脱处于中层官僚的命运，直接在曹丕身上痛下苦功，只要将在夺嫡之争中处于劣势的曹丕推上太子宝座，他就可以成为辅佐元勋而进入魏国最高统治阶层。于是，他想了种种策略，挫败了曹丕的政敌——曹植一党的攻击，终于使曹丕登上了太子之位。而这一步棋的</font>
		<a onclick="javascript:tagshow(event, '%B3%C9%B9%A6');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font color="#176209" size="4">成功</font>
						</strong>
				</u>
		</a>
		<font size="4">，直接影响了司马懿的一生。从此，他逐渐迈近了魏国的最高统治阶层。<br />　　这一时期，从司马懿初入丞相府时的二十九岁算起，到魏武帝逝世时他满四十岁为止，他为了“一跃而起、一飞冲天”而整整耗去了十一年的时间。<br />　　在这十一年里，可以看出司马懿的人生规划完全遵循儒家立身处世之道：修身、齐家、治国、平天下。司马懿牢牢把握住了儒家之道的核心环节——“修身”。只有“修身”功夫做得实、做得好，“治国平天下”的大志才不会是无本之木、无源之水。<br />　　“修身”这一课题，在司马懿看来，又可具体成“藏器于身，待时而动”八个字，也就是“识时务”：根据时势的需要，密切联系实际情况，以治国平天下之大志为导向，扎实锻炼自身各方面的能力，随时准备接受命运的考验与挑战。他最高明的一点就是——在什么时候、什么环境下需要突出自己哪一方面的能力以脱颖而出，他一向对此算计得十分精确。所以，司马懿能在魏武帝时期悄然无声而又不可遏制地崛起。<br />　　他的平步青云，也真正印证了《荀子》里那段名言：“无冥冥之志者，无昭昭之明；无惛惛之事者，无赫赫之功”。<br /><br /></font>
		<span style="FONT-SIZE: 12px">
				<font size="4">　　二、魏文帝时期<br />　　到了魏文帝曹丕时期，司马懿才真正迎来了他顺风顺水的人生阶段。<br />　　建安二十五年春正月，司马懿当时四十岁，汉丞相、魏王曹操于洛阳病逝。当时魏王府外有前来夺权的曹彰问罪之师，内有诸路兵马暴乱之迹，而汉室遗臣们也有蠢蠢欲动之相。史书上讲：“及魏武薨于洛阳，朝野危惧”。司马懿在这个时候毅然挺身而出，“纲纪丧事，内外肃然”，用自己的卓异才识镇了岌岌可危的时局，稳定了人心，并说服汉献帝正式册立曹丕为丞相、魏王。<br />　　他这初显身手之举，更是进一步赢得了曹丕的信任和重用。当曹丕一立为魏王，立即封他为封津亭侯，并转任丞相长史，成为魏王府中的核心人物之一。<br />　　这时，司马懿已消除了魏武帝时处处受到压制的威胁，可以直抒胸臆大显身手。他先是</font>
				<a onclick="javascript:tagshow(event, '%B2%DF%BB%AE');" href="javascript:;" target="_self">
						<u>
								<strong>
										<font color="#176209" size="4">策划</font>
								</strong>
						</u>
				</a>
				<font size="4">了以魏代汉受禅的“大略”，后又为魏文帝南征而“留守许昌，内镇百姓，外供军资”，并被魏文帝称为“萧何”之材。魏文帝病重时，仍不忘封他和曹真、陈群为顾命辅政大臣，并诏太子曹睿 ：“有间此三公者，慎勿疑之”。显而易见，司马懿已跻身于曹魏政权最高决策者的行列。<br />　现在我们可以来分析司马懿这段时期的人生规划：首先，曹丕能当太子、能当魏帝，出力最多、功劳最大的，应属司马懿(史书上虽没有清楚地描绘司马懿的种种谋略，这更显出了他的“阴”和“深”)。而曹丕本人对司马懿亦是非常感激，所以司马懿用不着再畏惧君主的猜忌了。加之，曹丕给了他宽松的</font>
				<a onclick="javascript:tagshow(event, '%B7%A2%D5%B9');" href="javascript:;" target="_self">
						<u>
								<strong>
										<font color="#176209" size="4">发展</font>
								</strong>
						</u>
				</a>
				<font size="4">环境和广阔的</font>
				<a onclick="javascript:tagshow(event, '%C0%FA%CA%B7');" href="javascript:;" target="_self">
						<u>
								<strong>
										<font color="#176209" size="4">历史</font>
								</strong>
						</u>
				</a>
				<font size="4">舞台，这对他“成大器、胜大任”来说，是一种极佳的铺垫。<br />　　但曹丕一向喜欢耀武扬威、好大喜功，自己并无军事才能，又爱征战杀伐。于是，在武事方面，司马懿不敢暴露自己的真才实学，任由这个虚荣心极强的君主去大出风头。但他却是埋下头来，扎扎实实担负起了丞相的重任，在文政方面做到了有所建树。这时候的司马懿还不想锋芒毕露，显得有些低调，这是有原因的：虽说曹丕对他极为信任，但在军事大政方面，他还是偏向于倚重自己的曹氏宗亲。而司马懿也没有必要急于显出掌握兵权的意图——“先安内，后取外”，毕竟丞相之职，对司马懿而言，亦可算是不错的平台。<br />　　司马懿立身行事的特长，我们这时也可以清楚地看出来了：目光远大，计谋深沉，遇事主动，办事缜密，滴水不漏，毫无瑕疵。所以，他能在曹丕时期稳打稳扎地真正崛起，而始终立于不败之地。<br />　　曹丕死时，他年龄为四十七岁。在曹丕为帝的这七年里，司马懿迎来了崭露头角的辉煌时期。但这七年里，他的舞台还不够广阔，他只是默默地在后方夯实着魏室的基业。但司马懿已不甘于隐在幕后了，他准备着走上历史前台大展身手。而这一机遇很快就要到来。</font>
		</span>
		<br />
		<br />
		<br />
		<font size="4">三、魏明帝时期<br />　　公元227年，魏太和元年，曹丕的儿子曹睿登基为明帝。他给了司马懿表现军事才能的机会。当时，东吴孙权率领数万雄师围困了魏国的江夏城，并派大将诸葛瑾、张霸攻打襄阳城。司马懿立刻率军出击，大败吴寇，诸葛瑾逃走，张霸被斩。司马懿这一赫赫战功，立刻得到了回报，他被任命为骠骑大将军。<br />　　至此，司马懿可以开府治事——有了自己的办事机构和统归自己指挥的军队，可以培植自己的力量。作为曹丕“东宫四友”之一的老臣吴质也在曹睿面前称赞他：“忠智至公，社稷之臣”。司马懿的威望，日渐隆盛。<br />　　随着魏室最得力的宗氏大臣曹真的死去，司马懿开始在魏国军政界独领风骚。魏明帝对他的放手任用，更加有利于他文韬武略的进一步发挥。在魏明帝时期，他从一个谋臣顺利转型为一个充满了戏剧色彩的武将。他深藏不露的军事才能得到了进一步淋漓尽致的发挥。他在明帝当政的十三年里，南平叛臣孟达，西拒诸葛亮，北摧公孙渊，招招见血封喉、凌厉之极，连吴国国主孙权也不得不为之惧服：“司马懿善用兵，变化若神，所向无前”。<br />　　司马懿这时人生规划的重点是：用显赫的军事业绩巩固自己的政治地位，同时利用“养寇以自重”的策略来慢慢蚕食魏室的军政基业。<br />　应该说，这时候的司马懿目光并没有局限于维护魏室的一国之安，他早已开始着手实施“肃清万里，总齐八荒、平一天下”的大志与大略。他少年时代便“慨然有忧天下心”，到了接近老年时才终于获得了“为天下解忧，为万民解困”的机遇和条件。这个历程，让他苦心经营了整整三十七年！<br />　　首先来看司马懿军事上精彩的第一笔——旬月之间擒灭叛臣孟达。他是精于使用急行军和潜行军的大师，当他陡然从天而降兵临上庸城下时，孟达还在做他的春秋大梦呢！于是，可怜的孟达便被他迅速而有力地一下扫平了，干净利落，毫不拖泥带水。这可以看出司马懿的用兵特色：静则隐于九地之下，令人无从发觉；动则发于九天之上，令人猝不及防。而从他与明帝论兵时自言：“凡攻敌，必先扼其喉而捣其心”，更见他善于集中优势兵力直攻敌之要害。所以，他往往是不发则已，一发必中，殄敌于鬼神莫测之际。<br />　　但为什么到了与诸葛亮对阵时，他又怎么不采用这种敏捷、果决、刚猛的战术呢？这正是笔者要讲的——他人生规划的重点并不是一味炫耀军事才能，他要着手实施他“扫平三国，一统天下”的大略了！<br /><br />下面我们来仔细分析诸葛亮和司马懿的祁山之战。这是一场持久战，司马懿从四十九岁打到五十五岁，整整打了六年，打出了诸葛亮“鞠躬尽瘁，死而后已”的千古盛誉，也打出了司马懿“扫平三国、统一天下”的雄厚资本。受罗贯中《三国演义》的影响，人们总以为司马懿军事才能不如诸葛亮，处处被诸葛亮牵着鼻子走。然而根据史书记载来看，事实根本不是这样的。首先，我们要弄清他俩在祁山之战的真正目的。诸葛亮的</font>
		<a onclick="javascript:tagshow(event, '%D5%BD%C2%D4');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font color="#176209" size="4">战略</font>
						</strong>
				</u>
		</a>
		<font size="4">目的很简单：攻下中原，消灭曹魏，光复汉室。司马懿的战略目的就复杂多了：一、挫败蜀军进攻；二、积蓄力量，取曹魏而代之；三、养兵千日，伺机统一天下。这多重性质的战略目的，让司马懿在表面上显得似乎有些被动。但根据自己的战略目的，他第一步做到了维持现状的平衡战略：一方面防止诸葛亮获得大的优势，对魏国和自己造成致命威胁；另一方面又不能击溃诸葛亮，还要保持诸葛亮的攻击力。“空城计”如果是真的史实，就验证了司马懿的这个平衡战略——所以，他宁可被部下称为“畏蜀如虎”，也不愿冲进西城小县抓住诸葛亮。真要是抓住了诸葛亮，司马懿就只能重复历代功臣“兔死狗烹”的戏剧性命运了。<br />　　第二步，司马懿实施了“偷天换日”的篡位战略。在祁山之战期间，他慢慢树立了自己在军队中的绝对权威，并肃清了军中的异己分子，重用牛金、郭淮等忠于自己的将领，夯实了自己的军权基础。我们可以通过后来的</font>
		<a onclick="javascript:tagshow(event, '%C0%FA%CA%B7');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font color="#176209" size="4">历史</font>
						</strong>
				</u>
		</a>
		<font size="4">来验证，当他的儿子司马师、司马昭叛魏之时，魏国大臣很少有站出来反抗的，甚至史书上都是寥寥几笔带过。曹氏政权如同纸屋一般一下就崩溃了，这个量的积累可不是司马师、司马昭当时所能造就的，应该是司马懿从掌握军政实权开始就着手为儿子们做好的铺垫。<br />     <br />　　第三步，司马懿已在祁山之战中开始积蓄“扫平吴蜀、统一天下”的资本了。他指挥大军与诸葛亮对峙，大战必避，小战必迎，以实战练军士，以实战养军威，</font>
		<a onclick="javascript:tagshow(event, '%B3%C9%B9%A6');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font color="#176209" size="4">成功</font>
						</strong>
				</u>
		</a>
		<font size="4">地建立了一支能征善战的军队，为将来消灭吴蜀、统一天下作好了军事上的准备。而魏国后期抗吴灭蜀的大将郭淮、王昶、邓艾等</font>
		<a onclick="javascript:tagshow(event, '%C8%CB%B2%C5');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font color="#176209" size="4">人才</font>
						</strong>
				</u>
		</a>
		<font size="4">，就是司马懿那时在祁山之战中一手培养和提拔起来的。<br />　　第四步，司马懿已着手历练自己事业的继承者——他的儿子司马师与司马昭。他将两个儿子带到祁山之战中，接受血与火、生与死的锻炼，为他俩将来顺利继承自己“一统天下”的事业做好了充足的素质准备。<br />　　这四步高招，是司马懿在祁山对峙中真正的事业，也是他这段时期人生规划中的神来之笔。虽然，他在和诸葛亮的对抗中，似乎没有取得表面上的胜利，但他的所有战略目的都达到了。这便是他的最大胜利——更何况他还拖死了积劳成疾的诸葛亮。<br />　　诸葛亮死后没多久，司马懿刚一返回朝廷，又被曹睿派往辽东攻打公孙渊。这是一场大规模的远征战役，但用兵如神的司马懿只率四万人马，“往百日，返百日，攻百日，以六十日为休息”，仅仅用了一年的时间，便彻底扫平了公孙渊，巩固了魏国的后方。<br />　　而这时曹睿已身患笃疾，一场朝廷权力交接战又拉开了帷幕。司马懿煞费苦心安插在明帝身侧的“内应”——魏中书监刘放、中书令孙资拼死力争，将远在万里之外得胜归来的司马懿再一次推上了顾命辅政之位。至此，身为“三朝元老”的司马懿重返魏国政坛，新的征程在他脚下延伸开来。虽然这时司马懿已年满六旬，但他雄心不减当年，积极准备着继往开来、再创辉煌。吴国、蜀国此刻才深深感到了司马懿的巨大威胁，然而一切都晚了，他们国中已经没有任何人可以与司马懿对敌了。<br />　　四、魏少帝曹芳时期<br />　　魏少帝曹芳时，司马懿已站到了权力的顶峰。这个时候能够阻止他大展雄才的人应该没有了。他挟“四朝元老”之威望，负“伊尹、周公”之才德，谁也不敢和他的远见卓识相抗。他在魏国军政大事上的每一次决策和行动，都是完美无缺的。<br />　　但另一个顾命辅政大臣曹爽却害怕司马家族终有一天会垄断朝政。于是他用了“欲抑先扬”之术，敬事司马懿如父，推举他为“太傅”，外示尊崇，而实则夺了他的军政大权。<br />　　司马懿处空名而无实权，一晃就是十年。在这十年里，他处处示弱，隐忍不发，静观其变。果然，曹爽志得意满之后走向了狂悖与淫慢。他作威作福，秽政横行，以致大臣离心、物议沸腾，魏国国势也渐趋衰弱。<br />　　这是司马懿无法忍受的。他可以忍受曹爽夺权，也可以忍受曹爽胡作非为，但他绝不能忍受曹爽毁掉他辛辛苦苦为魏国夯实的“一统天下”的大业根基。他为自己“达则兼济天下”的大志已不懈奋斗了近四十年，怎么可能让无知小儿曹爽来阻断！<br />　　于是，“高平陵事变”不可避免地发生了。曹爽一派被司马懿用雷霆手段一举摧灭。<br />　　司马懿在最后处置曹爽时，用了“斩草除根”之法，将曹氏宗亲翦灭殆尽。这一举措甚至招致了他的好友蒋济的反对。但他必须这么做。只有不留后患，才能保证朝局的稳定啊！况且，司马懿已走上了一条与曹魏政权决裂的不归之路。<br />　　公元251年，魏嘉平三年，司马懿已七十二岁了。他在除掉最后一个政敌王凌后，病死于洛阳，真可谓“生命不息，战斗不止”。<br />　　司马懿临终前，把两个儿子司马师、司马昭叫到榻前说：“吾事魏历年，官授太傅，人臣之位极矣；人皆疑吾有异志，吾尝怀恐惧。吾死之后，汝二人善理国政，慎之！慎之！”<br /><br />对于司马懿所言的“慎之”，也许有两层意思可以理解：其一是让二子善理国政，不可以心生异志；其二是让二子善保国政，不可轻易托付他人。但是无论司马懿本人有没有异志，有一点是可以肯定的，那就是通过他的不懈经营和艰苦努力，已经为后人的事业创造了最佳的政治、军事和</font>
		<a onclick="javascript:tagshow(event, '%BE%AD%BC%C3');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font color="#176209" size="4">经济</font>
						</strong>
				</u>
		</a>
		<font size="4">条件。司马懿死后，司马师和司马昭分别被封为大将军和骠骑上将军，总领尚书机密大事。从此对于曹魏而言，皇帝之势微而国家之势强，军政大权，尽归司马氏专断。<br />　　“山海争水，水必归海，非海求之，其势顺也。”继司马懿之后，呈现在司马昭、司马炎面前的天下大势，可谓“居高视下，势如劈竹”。他们所要做的，只是顺流而下，去完成</font>
		<a onclick="javascript:tagshow(event, '%C0%FA%CA%B7');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font color="#176209" size="4">历史</font>
						</strong>
				</u>
		</a>
		<font size="4">所赋予的某种必然。<br />　　公元262年，魏将邓艾偷渡阴平、奇袭成都得手。次年，蜀后主刘禅降魏，至此，蜀汉政权历二帝，前后42年，终于宣告结束。<br />　　公元265年，司马昭之子司马炎逼魏主曹奂禅位，司马炎登基，改国号为晋；公元280年，司马炎进讨吴国，吴主孙皓降晋，吴国灭亡。从而结束了魏蜀吴三国之间长达七十二年的混战局面，这就是</font>
		<a onclick="javascript:tagshow(event, '%D6%D0%B9%FA');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font color="#176209" size="4">中国</font>
						</strong>
				</u>
		</a>
		<font size="4">历史上的“三分归晋”。<br />　　总 结<br />　　司马懿是一个集政治家、军事家、权谋家于一身的儒家奇才。当然，这是他</font>
		<a onclick="javascript:tagshow(event, '%B3%C9%B9%A6');" href="javascript:;" target="_self">
				<u>
						<strong>
								<font color="#176209" size="4">成功</font>
						</strong>
				</u>
		</a>
		<font size="4">之后，人们给他定的性质。<br />　　人们会说，儒家以“忠孝”为本。司马懿本就不是魏之纯臣，也不尽忠于曹氏，怎么还能说他是儒家奇才呢？其实，儒学的根基是一个“仁”字。司马懿除魏之苛政、抚民于安乐，这不是“仁”吗？司马懿消乱世之纷争，统一天下，拯万民于战火之中，这不是“仁”吗？——“仁”比“忠”更大呀！这才是真正的儒者应持的观点。<br />　　因为仁者无敌，所以司马懿无敌。<br />　　司马懿从一个有志有才的青年，到一个内政军事名满天下的奇才，再到一个治国平天下的英雄。这完全应归功于他的人生规划做得完美无缺。在他人生的每一个重要机遇期里，他总能把握住最佳时机出手，而且一抓就是硕果累累，这是难能可贵的。<br />　　更可贵的，是他能忍：面对曹操的歧视和压制，他能忍；面对同僚的排挤和陷害，他能忍；面对诸葛亮的“巾帼之辱，”他能忍；面对小辈曹爽的欺侮，他也能忍。他人生规划中最璀灿的亮点，就是他的“忍”——坚百忍以图功业之终成。一个“忍”字贯穿了司马懿的整个人生规划；一个“忍”字，造就了千古一帝司马懿。<br /><br /></font>
<img src ="http://www.cppblog.com/Lee/aggbug/75802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-03-07 07:19 <a href="http://www.cppblog.com/Lee/archive/2009/03/07/75802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>7天，我的13家面试经历 （转）</title><link>http://www.cppblog.com/Lee/archive/2009/02/28/75142.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Sat, 28 Feb 2009 03:12:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/28/75142.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/75142.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/28/75142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/75142.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/75142.html</trackback:ping><description><![CDATA[
		<strong>7天，我的13家面试经历 <br />序 </strong>
		<br />2007，我最难忘的一年，这是我毕业的第一年，这一年的最后几天她毫不犹豫的离开了我，永远忘不掉的痛…… <br />2008，我最伤心的一年，我用一年的时间调整心态，让自己忘记。 <br />2009，一个好的开始，我相信一切都会好起来。 <br /><strong>我的两年 </strong><br />2006年09月，我开始实习了，在苏州的一家软件公司，工资为0元，一个月100RMB的吃饭补贴，我坚持到2007年07月。以前没接触过.NET,但是我C的底子比较好，学校里学过JAVA，所以C#学了比较短的时间就可以做东西了，这将近一年的时间我只做了一个网站，现在想想简直奇烂无比。 <br />2007年07月，我毕业的这一天找到了我的第一家公司，应聘的职位是.NET，面试题目做的很烂，公司主管看了题目之后说：“最看不惯公司招聘做题目的，这些题目都是人事弄的”。这算说到我心坎里了，然后问了我几个问题就OK了，这么简单的通过是我没想到的，我要的工资是1800RMB,公司是苏州的一个县级市里，我当时感觉这个工资已经很高了，而且公司包吃住，正式工作之后加了200RMB，听有经验的人说这个时候不要计较工资多少，先有份工作做着，于是我就这么做了，这段时间才知道什么是三层架构，什么是设计模式。直到2008年我的表现一直不错，2008是我转型的一年，一个机会摆在面前，我抓住了，虽然当时不知道这是机会，我转向C++方向。以前没学过C++，还是因为C的底子比较好，这一年里做了一个网络电话，学了很多新东西，SIP协议、RTP/RTCP协议、UDP协议，语音编程等。 <br />2009年年初，我被离职了，红颜祸水，一点不错。于是过年回来便踏上了求职的道路。 <br /><strong>投简历 </strong><br />刚开始我是一家家的看招聘信息，然后觉得合适的才投，目标是上海、苏州、南京，但是我是个懒人，所以投了几家就不耐烦了，于是搜索了关键字C++，然后看也不看就全选了，51job的这个全选的功能不错，然后全发，30秒搞定，然后睡觉。这一下算捅了马蜂窝了，到现在为止平均每天接到两个面试通知。我只在51job和智联投的简历。 <br /><strong>面试 </strong><br />1、南京XX <br />这家我并没有投简历，自己送上门的，我坚信天上不会掉馅饼，而且是个外包公司，我说过我这个人很懒，怎么可能去这种出力不讨好的地方，放弃。 <br />2、南京XX动力 <br />面试时间：2009/02/12 <br />职位：C++程序员 <br />描述：也是一家外包公司，这个时候的我有一些迷茫，怕找不到工作，也不管外包不外包了，先面试在说 <br />去的时候有两个做j2me的去复试，我问了一下工资，他们说1000多，我吓的直冒冷汗。题量比较大，多数题目看到了不知道如何下笔，例如谈谈你对XX的理解，XX和YY有什么异同，还有一些程序改错的题目。还有面试官我看了就不爽。 <br />结果：失败 <br />3、上海XX信息技术有限公司 <br />面试时间：2009/02/16 <br />职位：C++软件工程师 <br />描述：面试官和我差不多大，面试题目为.NET题目，我面试的职位是C++，他们却给我做纯 .NET题目，真是无奇不有，他们说他们公司面试都是做这套题目。然后是面试官提问，都是SIP协议有关的，可能因为是同龄人吧，聊的还不错，最后提到工资，我要了5000RMB，结果他们觉得有点高了。 <br />题目(有的题目记不清楚了，我会注明的)： <br />①、页面间传值的几种方法 <br />②、ref用法（这题是给了一个程序，然后让写结果的） <br />③、重载和重写的区别（这题是给了一个程序，然后让写结果的） <br />④、webservice和xml作用，谈谈对二者的理解 <br />⑤、用递归写个程序，裴波那契数列：1,1,2,3,5,8,13,21…… <br />⑥、一个英文翻译成汉语的题目，我英语奇烂，当然不会也记不住题目了。 <br />⑦、还有其它题目，我不记得了 <br />结果：失败 <br />4、上海XX有限公司 <br />面试时间：2009/02/19下午16:30 <br />职位：C/C++高级软件开发工程师 <br />描述：公司地理位置不错，位于上海市中心，主要是做linux下C/C++开发的，感觉规模比较小，我去的时候16:30，公司只有3个人在，其中一个应该是老板，另一个MM是接待，还有一个是技术的。老板很酷，面试我的时候眼皮半抬着斜躺在老板椅上，先让我做个自我介绍，我照着做了，然后问我是哪个学校的，我说常熟理工学院，然后他说：“你们学校是怎么教的，和别人交流都不会吗？”（意思是我自我介绍的不好）。我微笑：“我的学校很好，是我不好”。他沉没。之后和他聊了一些，对我的印象总体还算不错，之后是那个技术人员面试我，主要问了一些socket的知识，我要了5000工资，他们觉得有点高了，老板一直问我一天能给他写多少代码，我无语。 <br />结果：失败 <br />5、上海XX科技 <br />面试时间：2009/02/20上午11点 <br />职位：VOIP软件工程师 <br />描述：面试官是三个，同时提问。主要问了一些VOIP的知识。人事的那个MM不错，我面试之后已经中午了，刚好是吃饭的时间，MM一定要我吃饭再走，我推不过只得接受了，这里对请我吃饭的那个MM说声谢谢。 <br />题目(有的题目记不清楚了，我会注明的)： <br />①、堆和栈有什么区别 <br />②、sizeof用法,malloc用法（这题是给了一个程序，然后让写结果的） <br />③、VOIP题目（略） <br />④、还有其它题目，我不记得了 <br />结果：失败 <br />6、上海XX信息技术有限公司 <br />面试时间：2009/02/20下午2点 <br />职位：VC软件工程师 <br />描述：面试官不错，很和气，总是笑嘻嘻的，我自己觉得题目做的不好，于是就直接对他说我题目做的不好。 <br />题目(有的题目记不清楚了，我会注明的)： <br />①、TCP三次握手 <br />②、什么是线程互斥，什么是线程同步，进程和线程的区别，进程间通信方法，线程间通信方法 <br />③、不借助库函数实现函数char * IntToString(int iValue,char * string) <br />④、写出链表的创建、增加节点、删除节点、查找 <br />⑤、还有其它题目，我不记得了 <br />结果：失败 <br />7、苏州XX <br />面试时间：2009/02/23上午10点30 <br />职位：C/C++软件工程师 <br />描述：电话面试，本来说好上午10:30的，结果一直到下午才打电话给我，我这个时候正在路上，车多很吵，我也没心情和他们啰嗦，随便敷衍了事。是做linux下c语言开发的。 <br />题目： <br />①、const *和* const的区别 <br />②、不借助第3个变量交换a和b的值 <br />这题有两个答案，这里我给出： <br />a=a+b <br />b=a-b <br />a=a-b <br /><br />a=a^b <br />b=b^a <br />a=a^b <br />结果：失败 <br />8、上海XX信息技术有限公司 <br />面试时间：2009/02/23下午2点 <br />职位：网络游戏C++程序员 <br />描述：题目不难，面试我的应该是个技术总监，个子比较高，面试的地方好象是他们机房，汗，然后他坐下来拿出3块钱一包的白沙抽，是个牛人。我面试结束后刚出他们公司就接到了复试通知 <br />题目(有的题目记不清楚了，我会注明的)： <br />①、说说你对STL理解 <br />②、类和结构体的区别（C#的，这题是给了一个程序，然后让写结果的） <br />③、虚函数和纯虚函数（这题是给了一个程序，然后让写结果的） <br />④、SQL类（这类题目最多，主要考基本查询，聚合查询，时间处理函数，getdate(),dateadd()等） <br />⑤、数据库优化方法，SQL语句优化方法 <br />⑥、画出PC结构图 <br />⑦、游戏设计题（二选一） <br />⑧、还有其它题目，我不记得了 <br />结果：接到复试通知 <br />9、上海XX信息技术有限公司 <br />面试时间：2009/02/24上午10:30 <br />职位：呼叫中心软件工程师 <br />描述：没让做题目，公司做开发的80多人，主要做.NET和C++,问了我一些SIP相关的东西，还有设计模式，然后我要了6000工资，他压到5000，我说成交。 <br />结果：成功 <br />10、上海XX咨询有限公司 <br />面试时间：2009/02/24下午2:30 <br />职位：软件工程师 <br />描述：没让做题目，公司做开发的10多人，做股票方面的软件，问了我一些SIP相关的东西，因为我已经面上了一家，有底气了，所以工资要了7000，他压到5500，我说成交。 <br />结果：成功 <br />11、上海XX信息技术有限公司（复试） <br />面试时间：2009/02/25下午2点 <br />职位：网络游戏C++程序员 <br />描述：主要谈了一下工资待遇。我要了7000，他们说“给个理由”，我说“昨天已经面上了一家，给了6000”，然后他们把工资压到了6000，不用说，当然成交了。 <br />结果：成功 <br />12、2009/02/25下午15：26接到杭州的一家公司面试通知 <br />结果：放弃 <br />13、2009/02/25下午15：47接到苏州蜗牛面试通知 <br />结果：放弃 <br /><strong>我的观点 </strong><br />也许见解很片面，只是经历的太少，请大家谅解。我是.NET出身，深深体会到.NET门槛太低，要做好却又太难，门槛低意味着工资待遇不会太高，要么把.NET学的很好，要么转向门槛高点的方向。本次面试我的最大的感觉就是网络通信类的职位(特别是基于linux开发的职位)工资高、职位多、人才少，所以这方面的前景还是不错的，也衷心希望大家可以向这个方向发展。 <br />A、要直视面试官的双眼，因为你能看到很多东西，也表示对人的尊重。 <br />B、C++基础很重要，面试当中我很有体会 <br />C、要熟练掌握SOCKET的使用，掌握多线程 <br />D、了解至少两个以上的协议：sip或者h.263或者tcp协议（这三个必须掌握一个）、rtp/rtcp协议、udp协议 <br />E、最后一点最重要——自信。 <br /><strong>总结</strong><br />本次面试到次就告一段落了，最终会去哪家公司任职相信大家已经有结果了。我现在在回去的车上，心里想了很多，毕业的一年多时间发生了很多，缘起一个情字，以后的路还很长，但是我相信会一路走好。 <br />最后，祝福大家。 <br />2009/02/25 <br />      当爱已成往事 <br />转自<a href="http://topic.csdn.net/u/20090226/09/22b9e75f-a8bd-4da4-b365-0984216fbf2c.html">http://topic.csdn.net/u/20090226/09/22b9e75f-a8bd-4da4-b365-0984216fbf2c.html</a><img src ="http://www.cppblog.com/Lee/aggbug/75142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-28 11:12 <a href="http://www.cppblog.com/Lee/archive/2009/02/28/75142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]VC 常用插件</title><link>http://www.cppblog.com/Lee/archive/2009/02/25/74812.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Tue, 24 Feb 2009 16:27:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/25/74812.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/74812.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/25/74812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/74812.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/74812.html</trackback:ping><description><![CDATA[1.Visual Assist（强烈推荐）
<p><a href="http://www.wholetomato.com/">http://www.wholetomato.com/</a></p><p>VA从5.0一直到现在的VAX，功能越来越强大，除了以前版本中的自动识别各种关键字，系统函数，成员变量，自动给出输入提示，自动更正大小写错误，自动标示错误等等以外，最新的版本中还在</p><p>WorkSpace窗口中加入一个VA View，可以更方便的查找工程中的文件、类和变量。</p><p> </p><p>2.WndTabs（强烈推荐）</p><p><a href="http://www.wndtabs.com/">http://www.wndtabs.com/</a></p><p>WndTabs主要是在编辑窗口中显示了所有已经打开的文件，在VC中能够更方便的操作这些文件，比如修改文件属性，copy文件路径、文件名等，并且还开放源代码，你要是愿意的话，可以添加自己很兴趣的功能。</p><p> </p><p>3.LineCounter</p><p><a href="http://www.wndtabs.com/">http://www.wndtabs.com/</a></p><p>用来统计整个工程的代码行数，包括总行数、代码行数、注释行数、空行数等，并且对多个工程一起统计时，不会把相同的文件计算多次.</p><p> </p><p>4.Spelly</p><p><a href="http://www.wndtabs.com/">http://www.wndtabs.com/</a></p><p>一个拼写检查的插件，可以对整个文件或所选部分进行拼写检查，支持C/C++/C#, VB, Fortran 和HTML。</p><p> </p><p>5.SourceStyler C++</p><p><a href="http://www.sourcestyler.com/">http://www.sourcestyler.com/</a></p><p>此插件是针对C++的一个格式化工具，可以针对自己的编码习惯，选择一种编码风格，也可以自己定义，而且定义非常详细，有表达式、指针、模板、类、枚举等十几种，肯定能满足你的需要。</p><p> </p><p><br />6.Numega BoundsChecker（强烈推荐）</p><p>下载：百度一下……</p><p>是针对Visual C++6.0应用程序的最为全面的错误检测工具。BoundsChecker 能自动指出静态，堆栈内存错误和资源泄漏问题。BoundsChecker 能够校验最新的 Windows APIs，包括 ActiveX, DirectX, OLE/COM, ODBC等等。能够发现与 Windows 平台兼容性。</p><p> </p><p>7.BCGControlBar Library </p><p>下载：百度一下……</p><p>非常好的一套应用于vc6的界面扩展类库，轻松的作出 vc2003 的界面。并且给了各种界面例子，如vc.net、outlook、更换皮肤等等。</p><p> </p><p>8.Comment Wizard</p><p>下载：百度一下……</p><p>Visual C++插件，提供了Visual C++源代码注解标准化与自动化功能。在它的帮助下，您可快速创建标头文件信息注解，文件中模块注解， C++处理方式，以及Ｃ语言功能与历史校正功能注解，等等。</p><p><br />AutoComment:源代码（注释插件）<br />UploadFiles/2006-12/127265382.zip</p><p>FastUtilities(注释插件)<br />UploadFiles/2006-12/127179180.rar </p><img src ="http://www.cppblog.com/Lee/aggbug/74812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-25 00:27 <a href="http://www.cppblog.com/Lee/archive/2009/02/25/74812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]C++资源之不完全导引（完整版）</title><link>http://www.cppblog.com/Lee/archive/2009/02/25/74811.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Tue, 24 Feb 2009 16:26:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/25/74811.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/74811.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/25/74811.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/74811.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/74811.html</trackback:ping><description><![CDATA[
		<p>来源：<a href="http://www.csdn.net/">www.csdn.net</a><br />撰文：曾毅、陶文<br />声明：本文2004年5月首发于《CSDN开发高手》，版权归该杂志与《程序员》杂志社<br />所有。<br />------------------------------------------------------------------------<br />　　1，前言</p>
		<p>　　无数次听到“我要开始学习C++!”的呐喊，无数次听到“C++太复杂了，我真的<br />学不会”的无奈。Stan Lippman先生曾在《C++ Primer》一书中指出“C++是最为难<br />学的高级程序设计语言之一”，人们常将“之一”去掉以表达自己对C++的敬畏。诚<br />然，C++程序设计语言对于学习者的确有很多难以逾越的鸿沟，体系结构的庞大，应<br />接不暇并不断扩充的特性……除此之外，参考资料之多与冗杂使它的学习者望而却<br />步，欲求深入者苦不堪言。希望这一份不完全导引能够成为您C++学习之路上的引路<br />灯。</p>
		<p>　　撰写本文的初衷并不打算带领大家体验古老的C++历史，如果你想了解C++的历<br />史与其前期发展中诸多技术的演变，你应当去参考Bjarne的《The Design and Evo<br />lution of C++》。当然也不打算给大家一个无所不包的宝典（并非不想：其一是因<br />水平有限，其二无奈C++之博大精深），所给出的仅仅是一些我们认为对于想学习C<br />++的广大读者来说最重要并且触手可及的开发与学习资源。</p>
		<p>　　本文介绍并分析了一些编译器，开发环境，库，少量的书籍以及参考网站，并<br />且尽可能尝试着给出一个利用这些资源的导引，望对如同我们一样的初学者能够有<br />所裨益。</p>
		<p>-----------------------------------------------------------------------</p>
		<p>　　2，编译器</p>
		<p>　　在C++之外的任何语言中，编译器都从来没有受到过如此之重视。因为C++是一<br />门相当复杂的语言，所以编译器也难于构建。直到最近我们才开始能够使用上完全<br />符合C++标准的编译器（哦，你可能会责怪那些编译器厂商不能尽早的提供符合标准<br />的编译器，这只能怪他们各自维系着自身的一套别人不愿接受的标准）。什么？你<br />说这无关紧要？哦，不，你所需要的是和标准化C++高度兼容的编译环境。长远来看<br />，只有这样的编译器对C++开发人员来说才是最有意义的工具，尤其是对于程序设计<br />语言的学习者。一至性让代码具备可移植性，并让一门语言及其库的应用更为广泛<br />。嗯，是的，我们这里只打算介绍一些公认的优秀编译器。</p>
		<p>　　2.1 Borland C++</p>
		<p>　　这个是Borland C++ Builder和Borland C++ Builder X这两种开发环境的后台<br />编译器。（哦，我之所以将之分为两种开发环境你应当能明白为什么，正如Delphi<br />7到Delphi8的转变，是革命性的两代。）Borland C++由老牌开发工具厂商Borland<br />倾力打造。该公司的编译器素以速度快，空间效率高著称，Borland C++ 系列编译<br />器秉承了这个传统，属于非常优质的编译器。标准化方面早在5.5版本的编译器中对<br />标准化C++的兼容就达到了92.73%。目前最新版本是Borland C++ Builder X中的6.<br />0版本，官方称100%符合ANSI/ISO的C++标准以及C99标准。嗯…这正是我前面所指的<br />“完全符合C++标准的编译器”。</p>
		<p>　　2.2 Visual C++</p>
		<p>　　这个正是我们熟知的Visual Studio 和 Visual Studio.net 2002, 2003以及2<br />005 Whidbey中带的C++编译器。由Microsoft公司研制。在Visual Studio 6.0中，<br />因为编译器有太多地方不能与后来出现的C++标准相吻合而饱受批评（想想你在使用<br />STL的时候编译时报出的那些令人厌恶的error和warning吧）。VC++6.0对标准化C+<br />+的兼容只有83.43%。但是随着C++编译器设计大师Stanley Lippman以及诸多C++社<br />群达人的加盟，在Visual Studio.NET 2003中，Visual C++编译器已经成为一个非<br />常成熟可靠的C++编译器了。Dr.Dobb's Journal的评测显示Visual C++7.1对标准C<br />++的兼容性高达98.22%，一度成为CBX之前兼容性最好的编译器。结合强大的Visua<br />l Studio.NET开发环境，是一个非常不错的选择。至于Whidbey时代的Visual C++,<br />似乎微软所最关注的是C++/CLI……我们不想评论微软下一代的C++编译器对标准化<br />兼容如何，但他确实越来越适合.NET (其实你和我的感觉可能是一样的，微软不应<br />当把标准C++这块肥肉丢给Borland,然而微软可能并不这样认为)。</p>
		<p>　　2.3 GNU C++</p>
		<p>　　著名的开源C++编译器。是类Unix操作系统下编写C++程序的首选。特点是有非<br />常好的移植性，你可以在非常广泛的平台上使用它，同时也是编写跨平台，嵌入式<br />程序很好的选择。另外在符合标准这个方面一直都非常好，GCC3.3大概能够达到96<br />.15%。但是由于其跨平台的特性，在代码尺寸速度等优化上略微差一点。</p>
		<p>　　基于GNU C++的编译器有很多，比如：</p>
		<p>　　(1) Mingw<br />　　<a href="http://www.mingw.org/">http://www.mingw.org/</a><br />　　GCC的一个Windows的移植版本（Dev-C++的后台）</p>
		<p>　　(2) Cygwin<br />　　<a href="http://sources.redhat.com/cygwin/">http://sources.redhat.com/cygwin/</a><br />　　GCC的另外一个Windows移植版本是Cygwin的一部分，Cygwin是Windows下的一个<br />Unix仿真环境。严格的说是模拟GNU的环境，这也就是"Gnu's Not Unix"要表达的意<br />思，噢，扯远了，这并不是我们在这里关心的实质内容。</p>
		<p>　　(3) Djgpp<br />　　<a href="http://www.delorie.com/djgpp/">http://www.delorie.com/djgpp/</a><br />　　这是GCC的DOS移植版本。</p>
		<p>　　(4) RSXNT<br />　　<a href="http://www.mathematik.uni-bielefeld.de/~rainer/">http://www.mathematik.uni-bielefeld.de/~rainer/</a><br />　　这是GCC的DOS和Windows移植版本。</p>
		<p>　　(5) Intel C++<br />　　著名CPU制造厂商Intel出品的编译器，Special Design for Intel x86！对于<br />Intel x86结构的CPU经过特别的优化。在有些应用情况下，特别是数值计算等高性<br />能应用，仅仅采用Intel的编译器编译就能大幅度的提高性能。</p>
		<p>　　(6) Digital Mars C++<br />　　网络上提供免费下载，Zortech/Symantec C++的继承者，其前身在当年惨烈的<br />C++四国战中也是主角之一。</p>
		<p>　　3，开发环境</p>
		<p>　　开发环境对于程序员的作用不言而喻。选择自己朝夕相处的环境也不是容易的<br />事情，特别是在IDE如此丰富的情况下。下面就是我们推荐的一些常见的C++开发环<br />境，并没有包括一些小型的，罕见的IDE。其中任何一款都是功能丰富，可以用作日<br />常开发使用的。对于不同层面的开发者，请参见内文关于适用对象的描述。</p>
		<p>　　3.1 Visual Studio 6.0</p>
		<p>　　这个虽然是Microsoft公司的老版本的开发环境，但是鉴于其后继版本Visual<br />Studio.NET的庞大身躯，以及初学者并不那么高的功能要求，所以推荐这个开发环<br />境给C++的初学者，供其学习C++的最基本的部分，比如C的那部分子集，当然你别指<br />望他能够支持最新的C99标准。在日常的开发中，仍然有很多公司使用这个经典稳定<br />的环境，比如笔者就看曾亲见有些公司将其编译器替换为GCC做手机开发之用。</p>
		<p>　　3.2 Visual Studio.NET 2003</p>
		<p>　　作为Microsoft公司官方正式发布的最新版本开发环境，其中有太多激动人心的<br />功能。结合其最新的C++编译器。对于机器配置比较好的开发人员来说，使用这个开<br />发环境将能满足其大部分的要求。这里不打算单独说Visual Studio Whidbey,虽然<br />Visual Studio .NET 2005 - Whidbey社区预览版已经推出，但暂不是很稳定，读者<br />可以亲身去体验。</p>
		<p>　　3.3 Borland C++ Builder 6</p>
		<p>　　这个并不是Borland的C++开发环境的最新版本。选择它的原因是它不是用Java<br />写的IDE，速度比较快。它有一个很完善的GUI窗体设计器，和Delphi共用一个VCL。<br />由于这些特点，比较适合初学者上手。但是由于其GUI的中心位置，可能不利于对于<br />C++语言的学习。而且其为了支持VCL这个Object Pascal写的库也对C++进行了一些<br />私有的扩充。使得人们有一个不得不接受的事实：“Borland C++ Builder 6的高手<br />几乎都是Delphi高手”。</p>
		<p>　　3.4 Borland C++ Builder X</p>
		<p>　　正如前文所述，虽然版本号上和前面那个IDE非常相象，但是其实它们是完全不<br />同的两个集成开发环境。C++Builder更多的是一个和Delphi同步的C++版本的开发环<br />境，C++BuilderX则是完全从C++的角度思考得出的一个功能丰富的IDE。其最大的特<br />点是跨平台，跨编译器，多种Framework的集成，并且有一个WxWindows为基础的GU<br />I设计器。尤其是采用了纯C++来重写了整个Framework,摒弃了以前令人无奈的版本<br />。对于C++的开发来说，从编译器，到库，到功能集成都是非常理想的。可以预见，<br />Borland C++ Builder X 2.0很值得C++爱好者期待。唯一令人难堪之处是作为一个<br />C++的开发工具，其IDE是用Java写的，在配置不够理想的机器上请慎重考虑再安装<br />。</p>
		<p>　　3.5 Emacs + GCC</p>
		<p>　　前面讲的大部分是Windows环境下的集成开发环境。Linux上的开发者更倾向于<br />使用Emacs来编辑C++的文件，用Makefile来命令GCC做编译。虽然看上去比较松散，<br />但是这些东西综合起来还是一个开发环境。如果你能够娴熟的使用这样的环境写程<br />序，你的水平应该足够指导我们来写这篇陋文了。</p>
		<p>　　3.6 Dev C++</p>
		<p>　　GCC是一个很好的编译器。在Windows上的C++编译器一直和标准有着一段距离的<br />时候，GCC就是一个让Windows下开发者流口水的编译器。Dev-C++就是能够让GCC跑<br />在Windows下的工具，作为集成开发环境，还提供了同专业IDE相媲美的语法高亮，<br />代码提示，调试等功能。由于使用Delphi开发，占用内存少，速度很快，比较适合<br />轻量级的学习和使用。</p>
		<p>　　3.7 Eclipse + CDT</p>
		<p>　　Eclipse可是近来大名鼎鼎的开发工具。最新一期的Jolt大奖就颁给了这个杰出<br />的神物。说其神奇是因为，它本身是用Java写的，但是拥有比一般Java写的程序快<br />得多的速度。而且因为其基于插件组装一切的原则，使得能够有CDT这样的插件把E<br />clipse变成一个C/C++的开发环境。如果你一直用Eclipse写Java的程序，不妨用它<br />体验一下C++开发的乐趣。</p>
		<p>　　4，工具</p>
		<p>　　C++的辅助工具繁多，我们分门别类的为大家作介绍：<br />　　4.1 文档类<br />　　(1) Doxygen<br />　　参考站点：<a href="http://www.doxygen.org/">http://www.doxygen.org</a><br />　　Doxygen是一种适合C风格语言（如C++、C、IDL、Java甚至包括C#和PHP）的、<br />开放源码的、基于命令行的文档产生器。</p>
		<p>　　(2) C++2HTML<br />　　参考站点：<a href="http://www.bedaux.net/cpp2html/">http://www.bedaux.net/cpp2html/</a><br />　　把C++代码变成语法高亮的HTML</p>
		<p>　　(3) CodeColorizer<br />　　参考站点：<a href="http://www.chami.com/colorizer/">http://www.chami.com/colorizer/</a><br />　　它能把好几种语言的源代码着色为HTML</p>
		<p>　　(4) Doc-O-Matic<br />　　参考站点：<a href="http://www.doc-o-matic.com/">http://www.doc-o-matic.com/</a><br />　　Doc-O_Matic为你的C/C++，C++.net，Delphi/Pascal, VB.NET，C#和Java程序<br />或者组件产生准确的文档。Doc-O-Matic使用源代码中的符号和注释以及外部的文档<br />文件创建与流行的文档样式一致的文档。</p>
		<p>　　(5) DocVizor<br />　　参考站点：<a href="http://www.ucancode.net/Products/DocBuilder/Features.htm">http://www.ucancode.net/Products/DocBuilder/Features.htm</a><br />　　DocVizor满足了面向对象软件开发者的基本要求——它让我们能够看到C++工程<br />中的类层次结构。DocVizor快速地产生完整可供打印的类层次结构图，包括从第三<br />方库中来的那些类，除此之外DocVizor还能从类信息中产生HTML文件。</p>
		<p>　　(6) SourcePublisher C++<br />　　参考站点：<a href="http://www.scitools.com/sourcepublisher_c.html">http://www.scitools.com/sourcepublisher_c.html</a><br />　　给源代码产生提供快速直观的HTML报表，包括代码，类层次结构，调用和被调<br />用树，包含和被包含树。支持多种操作系统。</p>
		<p>　　(7) Understand<br />　　参考站点：<a href="http://www.scitools.com/ucpp.html">http://www.scitools.com/ucpp.html</a><br />　　分析任何规模的C或者C++工程，帮助我们更好的理解以及编写文档。</p>
		<p>　　4.2 代码类<br />　　(1) CC-Rider<br />　　参考站点：<a href="http://www.cc-rider.com/">http://www.cc-rider.com</a><br />　　CC-Rider是用于C/C++程序强大的代码可视化工具，通过交互式浏览、编辑及自<br />动文件来促进程序的维持和发展。</p>
		<p>　　(2) CodeInspect<br />　　参考站点：<a href="http://www.yokasoft.com/">http://www.yokasoft.com/</a><br />　　一种新的C/C++代码分析工具。它检查我们的源代码找出非标准的，可能的，以<br />及普通的错误代码。</p>
		<p>　　(3) CodeWizard<br />　　参考站点：<a href="http://www.parasoft.com/">http://www.parasoft.com</a><br />　　先进的C/C++源代码分析工具，使用超过500个编码规范自动化地标明危险的，<br />但是编译器不能检查到的代码结构。</p>
		<p>　　(4) C++ Validation Test Suites<br />　　参考站点：<a href="http://www.plumhall.com/suites.html">http://www.plumhall.com/suites.html</a><br />　　一组用于测试编译器和库对于标准吻合程度的代码库。</p>
		<p>　　(5) CppRefactory<br />　　参考站点：<a href="http://cpptool.sourceforge.net/">http://cpptool.sourceforge.net/</a><br />　　CPPRefactory是一个使得开发者能够重构他们的C++代码的程序。目的是使得C<br />++代码的重构能够尽可能的有效率和简单。</p>
		<p>　　(6) Lzz<br />　　参考站点：<a href="http://www.lazycplusplus.com/">http://www.lazycplusplus.com/</a><br />　　Lzz是一个自动化许多C++编程中的体力活的工具。它能够节省我们许多事件并<br />且使得编码更加有乐趣。给出一系列的声明，Lzz会给我们创建头文件和源文件。</p>
		<p>　　(7) QA C++ Generation 2000<br />　　参考站点：<a href="http://www.programmingresearch.com/solutions/qacpp.htm">http://www.programmingresearch.com/solutions/qacpp.htm</a><br />　　它关注面向对象的C++源代码，对有关于设计，效率，可靠性，可维护性的部分<br />提出警告信息。</p>
		<p>　　(8) s-mail project - Java to C++DOL<br />　　参考站点：<a href="http://sadlocha.strefa.pl/s-mail/ja2dol.html">http://sadlocha.strefa.pl/s-mail/ja2dol.html</a><br />　　把Java源代码翻译为相应的C++源代码的命令行工具。</p>
		<p>　　(9) SNIP from Cleanscape Software International<br />　　参考站点：<a href="http://www.cleanscape.net/stdprod/snip/index.html">http://www.cleanscape.net/stdprod/snip/index.html</a><br />　　一个填平编码和设计之间沟壑的易于使用的C++开发工具，节省大量编辑和调试<br />的事件，它还使得开发者能够指定设计模式作为对象模型，自动从对象模型中产生<br />C++的类。</p>
		<p>　　(10) SourceStyler C++<br />　　参考站点：<a href="http://www.ochresoftware.com/">http://www.ochresoftware.com/</a><br />　　对C/C++源代码提供完整的格式化和排版控制的工具。提供多于75个的格式化选<br />项以及完全支持ANSI C++。</p>
		<p>　　4.3 编译类<br />　　(1) Compilercache<br />　　参考站点：<a href="http://www.erikyyy.de/compilercache/">http://www.erikyyy.de/compilercache/</a><br />　　Compilercache是一个对你的C和C++编译器的封装脚本。每次我们进行编译，封<br />装脚本，把编译的结果放入缓存，一旦编译相同的东西，结果将从缓存中取出而不<br />是再次编译。</p>
		<p>　　(2) Ccache<br />　　参考站点：<a href="http://ccache.samba.org/">http://ccache.samba.org/</a><br />　　Ccache是一个编译器缓存。它使用起来就像C/C++编译器的缓存预处理器，编译<br />速度通常能提高普通编译过程的5~10倍。</p>
		<p>　　(3) Cmm (C++ with MultiMethods)<br />　　参考站点：<a href="http://www.op59.net/cmm/cmm-0.28/users.html">http://www.op59.net/cmm/cmm-0.28/users.html</a><br />　　这是一种C++语言的扩展。读入Cmm源代码输出C++的源代码，功能是对C++语言<br />添加了对multimethod的支持。</p>
		<p>　　(4) The Frost Project<br />　　参考站点：<a href="http://frost.flewid.de/">http://frost.flewid.de/</a><br />　　Forst使得你能够在C++程序中像原生的C++特性一样使用multimethod以及虚函<br />数参数。它是一个编译器的外壳。</p>
		<p>　　4.4 测试和调试类<br />　　(1) CPPUnit<br />　　CppUnit 是个基于 LGPL 的开源项目，最初版本移植自 JUnit，是一个非常优<br />秀的开源测试框架。CppUnit 和 JUnit 一样主要思想来源于极限编程。主要功能就<br />是对单元测试进行管理，并可进行自动化测试。</p>
		<p>　　(2) C++Test<br />　　参考站点：<a href="http://www.parasoft.com/">http://www.parasoft.com/</a><br />　　C++ Test是一个单元测试工具，它自动化了C和C++类，函数或者组件的测试。</p>
		<p>　　(3) Cantata++<br />　　参考站点：<a href="http://www.iplbath.com/products/tools/pt400.shtml">http://www.iplbath.com/products/tools/pt400.shtml</a><br />　　设计的目的是为了满足在合理的经济开销下使用这个工具可以让开发工程师开<br />展单元测试和集成测试的需求.</p>
		<p>　　(4) Purify<br />　　参考站点：<a href="http://www-900.ibm.com/cn/software/rational/products/purif">http://www-900.ibm.com/cn/software/rational/products/purif</a><br />yplus/index.shtml<br />　　IBM Rational PurifyPlus是一套完整的运行时分析工具，旨在提高应用程序的<br />可靠性和性能。PurifyPlus将内存错误和泄漏检测、应用程序性能描述、代码覆盖<br />分析等功能组合在一个单一、完整的工具包中。</p>
		<p>　　(5) BoundsChecker<br />　　BoundsChecker是一个C++运行时错误检测和调试工具。它通过在Visual Studi<br />o内自动化调试过程加速开发并且缩短上市的周期。BoundsChecker提供清楚，详细<br />的程序错误分析，许多是对C++独有的并且在static，stack和heap内存中检测和诊<br />断错误，以及发现内存和资源的泄漏。　　<br />        <br />        (6) Insure++<br />　　参考站点：<a href="http://www.parasoft.com/">http://www.parasoft.com/</a><br />　　一个自动化的运行时程序测试工具，检查难以察觉的错误,如内存覆盖，内存泄<br />漏，内存分配错误，变量初始化错误，变量定义冲突，指针错误，库错误，逻辑错<br />误和算法错误等。</p>
		<p>　　(7) GlowCode<br />　　参考站点：<a href="http://www.glowcode.com/">http://www.glowcode.com/</a><br />　　GlowCode包括内存泄漏检查，code profiler，函数调用跟踪等功能。给C++开<br />发者提供完整的错误诊断，和运行时性能分析工具包。</p>
		<p>　　(8) Stack Spy<br />　　参考站点：<a href="http://www.imperioustech.com/">http://www.imperioustech.com/</a><br />　　它能捕捉stack corruption, stack over run, stack overflow等有关栈的错<br />误。</p>
		<p>　　5，库</p>
		<p>　　在C++中，库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了<br />设计库来扩充功能要好过设计更多的语法的言论。现实中，C++的库门类繁多，解决<br />的问题也是极其广泛，库从轻量级到重量级的都有。不少都是让人眼界大开，亦或<br />是望而生叹的思维杰作。由于库的数量非常庞大，而且限于笔者水平，其中很多并<br />不了解。所以文中所提的一些库都是比较著名的大型库。</p>
		<p>　　5.1 标准库</p>
		<p>　　标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年<br />，直到标准的出台才正式定型，但是在标准库的实现上却很令人欣慰得看到多种实<br />现，并且已被实践证明为有工业级别强度的佳作。</p>
		<p>　　(1) Dinkumware C++ Library<br />　　参考站点：<a href="http://www.dinkumware.com/">http://www.dinkumware.com/</a><br />　　P.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr. Dobb's程序设<br />计杰出奖的获得者。其编写的库长期被Microsoft采用，并且最近Borland也取得了<br />其OEM的license，在其C/C++的产品中采用Dinkumware的库。</p>
		<p>　　(2) RogueWave Standard C++ Library<br />　　参考站点：<a href="http://www.roguewave.com/">http://www.roguewave.com/</a><br />　　这个库在Borland C++ Builder的早期版本中曾经被采用，后来被其他的库给替<br />换了。笔者不推荐使用。</p>
		<p>　　(3) SGI STL<br />　　参考站点：<a href="http://www.roguewave.com/">http://www.roguewave.com/</a><br />　　SGI公司的C++标准模版库。</p>
		<p>　　(4) STLport<br />　　参考站点：<a href="http://www.stlport.org/">http://www.stlport.org/</a><br />　　SGI STL库的跨平台可移植版本。</p>
		<p>　　5.2 “准”标准库 - Boost<br />　　参考站点：<a href="http://www.boost.org/">http://www.boost.org</a><br />　　国内镜像：<a href="http://www.c-view.org/tech/lib/boost/index.htm">http://www.c-view.org/tech/lib/boost/index.htm</a><br />　　Boost库是一个经过千锤百炼、可移植、提供源代码的C++库，作为标准库的后<br />备，是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起<br />，在C++社区中影响甚大，其成员已近2000人。 Boost库为我们带来了最新、最酷、<br />最实用的技术，是不折不扣的“准”标准库。<br />　　Boost中比较有名气的有这么几个库：</p>
		<p>　　Regex<br />　　正则表达式库<br />　　Spirit<br />　　LL parser framework，用C++代码直接表达EBNF</p>
		<p>　　Graph<br />　　图组件和算法</p>
		<p>　　Lambda<br />　　在调用的地方定义短小匿名的函数对象，很实用的functional功能</p>
		<p>　　concept check<br />　　检查泛型编程中的concept</p>
		<p>　　Mpl<br />　　用模板实现的元编程框架</p>
		<p>　　Thread<br />　　可移植的C++多线程库</p>
		<p>　　Python<br />　　把C++类和函数映射到Python之中</p>
		<p>　　Pool<br />　　内存池管理</p>
		<p>　　smart_ptr<br />　　5个智能指针，学习智能指针必读，一份不错的参考是来自CUJ的文章：</p>
		<p>　　Smart Pointers in Boost，哦，这篇文章可以查到，CUJ是提供在线浏览的。<br />中文版见笔者在《Dr. Dobb's Journal软件研发杂志》第7辑上的译文。</p>
		<p>　　Boost总体来说是实用价值很高，质量很高的库。并且由于其对跨平台的强调，<br />对标准C++的强调，是编写平台无关，现代C++的开发者必备的工具。但是Boost中也<br />有很多是实验性质的东西，在实际的开发中实用需要谨慎。并且很多Boost中的库功<br />能堪称对语言功能的扩展，其构造用尽精巧的手法，不要贸然的花费时间研读。Bo<br />ost另外一面，比如Graph这样的库则是具有工业强度，结构良好，非常值得研读的<br />精品代码，并且也可以放心的在产品代码中多多利用。</p>
		<p>5.3 GUI</p>
		<p>　　在众多C++的库中，GUI部分的库算是比较繁荣，也比较引人注目的。在实际开<br />发中，GUI库的选择也是非常重要的一件事情，下面我们综述一下可选择的GUI库，<br />各自的特点以及相关工具的支持。</p>
		<p>　　(1) MFC</p>
		<p>　　大名鼎鼎的微软基础类库（Microsoft Foundation Class）。大凡学过VC++的<br />人都应该知道这个库。虽然从技术角度讲，MFC是不大漂亮的，但是它构建于Windo<br />ws API 之上，能够使程序员的工作更容易,编程效率高，减少了大量在建立 Windo<br />ws 程序时必须编写的代码，同时它还提供了所有一般 C++ 编程的优点，例如继承<br />和封装。MFC 编写的程序在各个版本的Windows操作系统上是可移植的，例如，在<br />Windows 3.1下编写的代码可以很容易地移植到 Windows NT 或 Windows 95 上。但<br />是在最近发展以及官方支持上日渐势微。</p>
		<p>　　(2) QT</p>
		<p>　　参考网站：<a href="http://www.trolltech.com/">http://www.trolltech.com/</a><br />　　Qt是Trolltech公司的一个多平台的C++图形用户界面应用程序框架。它提供给<br />应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的<br />很容易扩展，并且允许真正地组件编程。自从1996年早些时候，Qt进入商业领域，<br />它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环<br />境KDE 的基础，同时它还支持Windows、Macintosh、Unix/X11等多种平台。</p>
		<p>　　(3) WxWindows</p>
		<p>　　参考网站：<a href="http://www.wxwindows.org/">http://www.wxwindows.org/</a><br />　　跨平台的GUI库。因为其类层次极像MFC，所以有文章介绍从MFC到WxWindows的<br />代码移植以实现跨平台的功能。通过多年的开发也是一个日趋完善的GUI库，支持同<br />样不弱于前面两个库。并且是完全开放源代码的。新近的C++ Builder X的GUI设计<br />器就是基于这个库的。</p>
		<p>　　(4) Fox</p>
		<p>　　参考网站：<a href="http://www.fox-toolkit.org/">http://www.fox-toolkit.org/</a><br />　　开放源代码的GUI库。作者从自己亲身的开发经验中得出了一个理想的GUI库应<br />该是什么样子的感受出发，从而开始了对这个库的开发。有兴趣的可以尝试一下。</p>
		<p>
				<br />　　(5) WTL<br />　　基于ATL的一个库。因为使用了大量ATL的轻量级手法，模板等技术，在代码尺<br />寸，以及速度优化方面做得非常到位。主要面向的使用群体是开发COM轻量级供网络<br />下载的可视化控件的开发者。</p>
		<p>　　(6) GTK</p>
		<p>　　参考网站：<a href="http://gtkmm.sourceforge.net/">http://gtkmm.sourceforge.net/</a><br />　　GTK是一个大名鼎鼎的C的开源GUI库。在Linux世界中有Gnome这样的杀手应用。<br />而GTK就是这个库的C++封装版本。</p>
		<p>　　5.4 网络通信</p>
		<p>　　(1) ACE</p>
		<p>　　参考网站：<a href="http://www.cs.wustl.edu/~schmidt/ACE.html">http://www.cs.wustl.edu/~schmidt/ACE.html</a><br />　　C++库的代表，超重量级的网络通信开发框架。ACE自适配通信环境（Adaptive<br />Communication Environment）是可以自由使用、开放源代码的面向对象框架，在<br />其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++包<br />装外观（Wrapper Facade）和框架组件，可跨越多种平台完成通用的通信软件任务<br />，其中包括：事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通<br />信、共享内存管理、消息路由、分布式服务动态（重）配置、并发执行和同步，等<br />等。</p>
		<p>　　(2) StreamModule</p>
		<p>　　参考网站：<a href="http://www.omnifarious.org/StrMod/">http://www.omnifarious.org/StrMod/</a><br />　　设计用于简化编写分布式程序的库。尝试着使得编写处理异步行为的程序更容<br />易，而不是用同步的外壳包起异步的本质。</p>
		<p>　　(3) SimpleSocket</p>
		<p>　　参考网站：<a href="http://home.hetnet.nl/~lcbokkers/simsock.htm">http://home.hetnet.nl/~lcbokkers/simsock.htm</a><br />　　这个类库让编写基于socket的客户/服务器程序更加容易。</p>
		<p>　　(4) A Stream Socket API for C++<br />　　参考网站：<a href="http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.h">http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.h</a><br />tml</p>
		<p>　　又一个对Socket的封装库。</p>
		<p>　　5.5 XML</p>
		<p>　　(1) Xerces</p>
		<p>　　参考网站：<a href="http://xml.apache.org/xerces-c/">http://xml.apache.org/xerces-c/</a><br />　　Xerces-C++ 是一个非常健壮的XML解析器，它提供了验证，以及SAX和DOM API<br />。XML验证在文档类型定义(Document Type Definition，DTD)方面有很好的支持，<br />并且在2001年12月增加了支持W3C XML Schema 的基本完整的开放标准。</p>
		<p>　　(2) XMLBooster</p>
		<p>　　参考网站：<a href="http://www.xmlbooster.com/">http://www.xmlbooster.com/</a><br />　　这个库通过产生特制的parser的办法极大的提高了XML解析的速度，并且能够产<br />生相应的GUI程序来修改这个parser。在DOM和SAX两大主流XML解析办法之外提供了<br />另外一个可行的解决方案。</p>
		<p>　　(3) Pull Parser</p>
		<p>　　参考网站：<a href="http://www.extreme.indiana.edu/xgws/xsoap/xpp/">http://www.extreme.indiana.edu/xgws/xsoap/xpp/</a><br />　　这个库采用pull方法的parser。在每个SAX的parser底层都有一个pull的parse<br />r，这个xpp把这层暴露出来直接给大家使用。在要充分考虑速度的时候值得尝试。</p>
		<p>
				<br />　　(4) Xalan</p>
		<p>　　参考网站：<a href="http://xml.apache.org/xalan-c/">http://xml.apache.org/xalan-c/</a><br />　　Xalan是一个用于把XML文档转换为HTML，纯文本或者其他XML类型文档的XSLT处<br />理器。</p>
		<p>　　(5) CMarkup</p>
		<p>　　参考网站：<a href="http://www.firstobject.com/xml.htm">http://www.firstobject.com/xml.htm</a><br />　　这是一种使用EDOM的XML解析器。在很多思路上面非常灵活实用。值得大家在D<br />OM和SAX之外寻求一点灵感。</p>
		<p>　　(6) libxml++</p>
		<p>　　<a href="http://libxmlplusplus.sourceforge.net/">http://libxmlplusplus.sourceforge.net/</a><br />　　libxml++是对著名的libxml XML解析器的C++封装版本</p>
		<p>　　5.6 科学计算</p>
		<p>　　(1) Blitz++</p>
		<p>　　参考网站：<a href="http://www.oonumerics.org/blitz/">http://www.oonumerics.org/blitz/</a><br />　　Blitz++ 是一个高效率的数值计算函数库，它的设计目的是希望建立一套既具<br />像C++ 一样方便，同时又比Fortran速度更快的数值计算环境。通常，用C++所写出<br />的数值程序，比 Fortran慢20%左右，因此Blitz++正是要改掉这个缺点。方法是利<br />用C++的template技术，程序执行甚至可以比Fortran更快。Blitz++目前仍在发展中<br />，对于常见的SVD，FFTs，QMRES等常见的线性代数方法并不提供，不过使用者可以<br />很容易地利用Blitz++所提供的函数来构建。</p>
		<p>　　(2) POOMA</p>
		<p>　　参考网站：<a href="http://www.codesourcery.com/pooma/pooma">http://www.codesourcery.com/pooma/pooma</a><br />　　POOMA是一个免费的高性能的C++库，用于处理并行式科学计算。POOMA的面向对<br />象设计方便了快速的程序开发，对并行机器进行了优化以达到最高的效率，方便在<br />工业和研究环境中使用。</p>
		<p>　　(3) MTL</p>
		<p>　　参考网站：<a href="http://www.osl.iu.edu/research/mtl/">http://www.osl.iu.edu/research/mtl/</a><br />　　Matrix Template Library(MTL)是一个高性能的泛型组件库，提供了各种格式<br />矩阵的大量线性代数方面的功能。在某些应用使用高性能编译器的情况下，比如In<br />tel的编译器，从产生的汇编代码可以看出其与手写几乎没有两样的效能。</p>
		<p>　　(4) CGAL</p>
		<p>　　参考网站：<a href="http://www.cgal.org/">www.cgal.org</a></p>
		<p>　　Computational Geometry Algorithms Library的目的是把在计算几何方面的大<br />部分重要的解决方案和方法以C++库的形式提供给工业和学术界的用户。</p>
		<p>　　5.7 游戏开发</p>
		<p>　　(1) Audio/Video 3D C++ Programming Library</p>
		<p>　　参考网站：<a href="http://www.galacticasoftware.com/products/av/">http://www.galacticasoftware.com/products/av/</a><br />　　AV3D是一个跨平台，高性能的C++库。主要的特性是提供3D图形，声效支持（S<br />B,以及S3M），控制接口（键盘，鼠标和遥感），XMS。</p>
		<p>　　(2) KlayGE</p>
		<p>　　参考网站：<a href="http://home.g365.net/enginedev/">http://home.g365.net/enginedev/</a><br />　　国内游戏开发高手自己用C++开发的游戏引擎。KlayGE是一个开放源代码、跨平<br />台的游戏引擎，并使用Python作脚本语言。KlayGE在LGPL协议下发行。感谢龚敏敏<br />先生为中国游戏开发事业所做出的贡献。</p>
		<p>　　(3) OGRE</p>
		<p>　　参考网站：<a href="http://www.ogre3d.org/">http://www.ogre3d.org</a><br />　　OGRE（面向对象的图形渲染引擎）是用C++开发的，使用灵活的面向对象3D引擎<br />。它的目的是让开发者能更方便和直接地开发基于3D硬件设备的应用程序或游戏。<br />引擎中的类库对更底层的系统库（如：Direct3D和OpenGL）的全部使用细节进行了<br />抽象，并提供了基于现实世界对象的接口和其它类。</p>
		<p>　　5.8 线程</p>
		<p>　　(1) C++ Threads</p>
		<p>　　参考网站：<a href="http://threads.sourceforge.net/">http://threads.sourceforge.net/</a><br />　　这个库的目标是给程序员提供易于使用的类，这些类被继承以提供在Linux环境<br />中很难看到的大量的线程方面的功能。</p>
		<p>　　(2) ZThreads</p>
		<p>　　参考网站：<a href="http://zthread.sourceforge.net/">http://zthread.sourceforge.net/</a><br />　　一个先进的面向对象，跨平台的C++线程和同步库。</p>
		<p>　　5.9 序列化</p>
		<p>　　(1) s11n</p>
		<p>　　参考网站：<a href="http://s11n.net/">http://s11n.net/</a><br />　　一个基于STL的C++库，用于序列化POD，STL容器以及用户定义的类型。</p>
		<p>　　(2) Simple XML Persistence Library</p>
		<p>　　参考网站：<a href="http://sxp.sourceforge.net/">http://sxp.sourceforge.net/</a><br />　　这是一个把对象序列化为XML的轻量级的C++库。</p>
		<p>　　5.10 字符串</p>
		<p>　　(1) C++ Str Library</p>
		<p>　　参考网站：<a href="http://www.utilitycode.com/str/">http://www.utilitycode.com/str/</a><br />　　操作字符串和字符的库，支持Windows和支持gcc的多种平台。提供高度优化的<br />代码，并且支持多线程环境和Unicode，同时还有正则表达式的支持。</p>
		<p>　　(2) Common Text Transformation Library</p>
		<p>　　参考网站：<a href="http://cttl.sourceforge.net/">http://cttl.sourceforge.net/</a><br />　　这是一个解析和修改STL字符串的库。CTTL substring类可以用来比较，插入，<br />替换以及用EBNF的语法进行解析。</p>
		<p>　　(3) GRETA</p>
		<p>　　参考网站：<a href="http://research.microsoft.com/projects/greta/">http://research.microsoft.com/projects/greta/</a><br />　　这是由微软研究院的研究人员开发的处理正则表达式的库。在小型匹配的情况<br />下有非常优秀的表现。</p>
		<p>　　5.11 综合</p>
		<p>　　(1) P::Classes</p>
		<p>　　参考网站：<a href="http://pclasses.com/">http://pclasses.com/</a><br />　　一个高度可移植的C++应用程序框架。当前关注类型和线程安全的signal/slot<br />机制，i/o系统包括基于插件的网络协议透明的i/o架构，基于插件的应用程序消息<br />日志框架，访问sql数据库的类等等。</p>
		<p>　　(2) ACDK - Artefaktur Component Development Kit</p>
		<p>　　参考网站：<a href="http://acdk.sourceforge.net/">http://acdk.sourceforge.net/</a><br />　　这是一个平台无关的C++组件框架，类似于Java或者.NET中的框架（反射机制，<br />线程，Unicode，废料收集，I/O，网络，实用工具，XML，等等），以及对Java, P<br />erl, Python, TCL, Lisp, COM 和 CORBA的集成。</p>
		<p>　　(3) dlib C++ library</p>
		<p>　　参考网站：<a href="http://www.cis.ohio-state.edu/~kingd/dlib/">http://www.cis.ohio-state.edu/~kingd/dlib/</a><br />　　各种各样的类的一个综合。大整数，Socket，线程，GUI，容器类,以及浏览目<br />录的API等等。</p>
		<p>　　(4) Chilkat C++ Libraries</p>
		<p>　　参考网站：<a href="http://www.chilkatsoft.com/cpp_libraries.asp">http://www.chilkatsoft.com/cpp_libraries.asp</a><br />　　这是提供zip，e-mail，编码，S/MIME，XML等方面的库。</p>
		<p>　　(5) C++ Portable Types Library (PTypes)</p>
		<p>　　参考网站：<a href="http://www.melikyan.com/ptypes/">http://www.melikyan.com/ptypes/</a><br />　　这是STL的比较简单的替代品，以及可移植的多线程和网络库。</p>
		<p>　　(6) LFC</p>
		<p>　　参考网站：<a href="http://lfc.sourceforge.net/">http://lfc.sourceforge.net/</a><br />　　哦，这又是一个尝试提供一切的C++库</p>
		<p>　　5.12 其他库</p>
		<p>　　(1) Loki</p>
		<p>　　参考网站：<a href="http://www.moderncppdesign.com/">http://www.moderncppdesign.com/</a><br />　　哦，你可能抱怨我早该和Boost一起介绍它，一个实验性质的库。作者在loki中<br />把C++模板的功能发挥到了极致。并且尝试把类似设计模式这样思想层面的东西通过<br />库来提供。同时还提供了智能指针这样比较实用的功能。</p>
		<p>　　(2) ATL</p>
		<p>　　ATL(Active Template Library)<br />　　是一组小巧、高效、灵活的类，这些类为创建可互操作的COM组件提供了基本的<br />设施。</p>
		<p>　　(3) FC++: The Functional C++ Library<br />　　这个库提供了一些函数式语言中才有的要素。属于用库来扩充语言的一个代表<br />作。如果想要在OOP之外寻找另一分的乐趣，可以去看看函数式程序设计的世界。大<br />师Peter Norvig在 “Teach Yourself Programming in Ten Years”一文中就将函<br />数式语言列为至少应当学习的6类编程语言之一。</p>
		<p>　　(4) FACT!</p>
		<p>　　参考网站：<a href="http://www.kfa-juelich.de/zam/FACT/start/index.html">http://www.kfa-juelich.de/zam/FACT/start/index.html</a><br />　　另外一个实现函数式语言特性的库</p>
		<p>　　(5) Crypto++<br />　　提供处理密码，消息验证，单向hash，公匙加密系统等功能的免费库。</p>
		<p>　　还有很多非常激动人心或者是极其实用的C++库，限于我们的水平以及文章的篇<br />幅不能包括进来。在对于这些已经包含近来的库的介绍中，由于并不是每一个我们<br />都使用过，所以难免有偏颇之处，请读者见谅。</p>
		<p>　　6，书籍</p>
		<p>　　以前熊节先生曾撰文评论相对于Java程序设计语言，C++的好书多如牛毛。荣耀<br />先生在《程序员》杂志上撰文《C++程序设计之四书五经》也将本领域内几乎所有的<br />经典书籍作了全面的介绍,任何关于书的评论此时看来便是很多余的了。个人浅见，<br />除非你打算以C++作为唯一兴趣或者生存之本，一般读者确实没有足够的时间和必要<br />将20余本书籍全部阅读。更有参考价值的是荣耀先生的另一篇文章：《至少应该阅<br />读的九本C++著作》，可以从下面的地址浏览到此文：</p>
		<p>　　<a href="http://www.royaloo.com/articles/articles_2003/9CppBooks.htm">http://www.royaloo.com/articles/articles_2003/9CppBooks.htm</a><br />　　下面几本书对于走在C++初学之路上的读者是我们最愿意推荐给大家的：</p>
		<p>　　(1) 《C++ Primer》</p>
		<p>　　哦，也许你会抱怨我们为什么不先介绍TCPL,但对于走在学习之路上的入门者，<br />本书内容更为全面，更为详细易懂，我们称它为“C++的超级宝典”并不过分。配有<br />一本不错的习题解答《C++ Primer Answer Book》可以辅助你的学习之路。</p>
		<p>　　(2) 《Essential C++》</p>
		<p>　　如果说《C++ Primer》是C++领域的超级宝典，那么此书作为掌握C++的大局观<br />当之无愧。正如《.NET大局观》一书能够让读者全揽.NET，本书讲述了C++中最核心<br />的全部主题。书虽不厚，内容精炼，不失为《C++ Primer》读者茶余饭后的主题回<br />顾之作。</p>
		<p>　　(3) 《The C++ Programming Language》</p>
		<p>　　Bjarne为你带来的C++教程，真正能够告诉你怎么用才叫真正的C++的唯一一本<br />书。虽然如同“某某程序设计语言”这样的书籍会给大家一个内容全揽，入门到精<br />通的感觉，但本书确实不太适合初学者阅读。如果你自认为是一名很有经验的C++程<br />序员，那至少也要反复咀嚼Bjarne先生所强调的若干内容。</p>
		<p>　　(4) 《Effective C++》，《More Effective C++》</p>
		<p>　　是的，正如一些C++爱好者经常以读过与没有读过上述两本作品来区分你是否是<br />C++高手。我们也极力推崇这两本著作。在各种介绍C++专家经验的书籍里面，这两<br />本是最贴近语言本质，看后最能够有脱胎换骨感觉的书，读此书你需每日三省汝身<br />。</p>
		<p>　　技术书籍仁者见仁，过多的评论反无太多意义，由读者喜好选择最适合自己的<br />书方为上策。</p>
		<p>
				<br />　　7，资源网站</p>
		<p>　　正如我们可以通过计算机历史上的重要人物了解计算机史的发展，C++相关人物<br />的网站也可以使我们得到最有价值的参考与借鉴，下面的人物我们认为没有介绍的<br />必要，只因下面的人物在C++领域的地位众所周知，我们只将相关的资源进行罗列以<br />供读者学习，他们有的工作于贝尔实验室，有的工作于知名编译器厂商，有的在不<br />断推进语言的标准化，有的为读者撰写了多部千古奇作……<br />　　(1) Bjarne Stroustrup<br />　　<a href="http://www.research.att.com/~bs/">http://www.research.att.com/~bs/</a></p>
		<p>　　(2) Stanley B. Lippman<br />　　<a href="http://blogs.msdn.com/slippman/">http://blogs.msdn.com/slippman/</a><br />　　中文版 <a href="http://www.zengyihome.net/slippman/index.htm">http://www.zengyihome.net/slippman/index.htm</a></p>
		<p>　　(3) Scott Meyers<br />　　<a href="http://www.aristeia.com/">http://www.aristeia.com/</a></p>
		<p>　　(4) David Musser<br />　　<a href="http://www.cs.rpi.edu/~musser/">http://www.cs.rpi.edu/~musser/</a></p>
		<p>　　(5) Bruce Eckel<br />　　<a href="http://www.bruceeckel.com/">http://www.bruceeckel.com</a></p>
		<p>　　(6) Nicolai M. Josuttis<br />　　<a href="http://www.josuttis.com/">http://www.josuttis.com/</a></p>
		<p>　　(7) Herb Sutter<br />　　<a href="http://www.gotw.ca/">http://www.gotw.ca/</a></p>
		<p>　　(8) Andrei Alexandrescu<br />　　<a href="http://www.coderncppdesign.com/">http://www.coderncppdesign.com/</a></p>
		<p>　　(9) 侯捷先生<br />　　<a href="http://www.jjhou.com/">http://www.jjhou.com</a></p>
		<p>　　(10) 孟岩先生<br />　　先生繁忙于工作，痴迷于技术，暂无个人主页，关于先生的作品可以通过CSDN<br />的专栏和侯先生的主页访问到。</p>
		<p>　　(11) 荣耀先生<br />　　<a href="http://www.royaloo.com/">http://www.royaloo.com/</a></p>
		<p>　　(12) 潘爱民先生<br />　　<a href="http://www.icst.pku.edu.cn/panaimin/pam_homepage.htm">http://www.icst.pku.edu.cn/panaimin/pam_homepage.htm</a></p>
		<p>　　除了上述大师的主页外，以下的综合类C++学习参考站点是我们非常愿意向大家<br />推荐的：</p>
		<p>　　(1) CodeProject<br />　　<a href="http://www.codeproject.com/">http://www.codeproject.com</a></p>
		<p>　　(2) CodeGuru<br />　　<a href="http://www.codeguru.com/">http://www.codeguru.com</a></p>
		<p>　　(3) Dr. Dobb's Journal<br />　　<a href="http://www.ddj.com/">http://www.ddj.com</a></p>
		<p>　　(4) C/C++ Users Journal<br />　　<a href="http://www.cuj.com/">http://www.cuj.com</a></p>
		<p>　　(5) C维视点<br />　　<a href="http://www.c-view.org/">http://www.c-view.org</a></p>
		<p>　　(6) allaboutprogram<br />　　<a href="http://www.allaboutprogram.com/">http://www.allaboutprogram.com</a><br />　　其他资料</p>
		<p>　　(1) ISO IEC JTC1/SC22/WG21 - C++：标准C++的权威参考<br />　　<a href="http://anubis.dkuug.dk/jtc1/sc22/wg21/">http://anubis.dkuug.dk/jtc1/sc22/wg21/</a></p>
		<p>　　(2) C++ FAQ LITE — Frequently Asked Questions: 最为全面的C++FAQ<br />　　<a href="http://www.sunistudio.com/cppfaq/index.html">http://www.sunistudio.com/cppfaq/index.html</a><br />　　C/C++ 新闻组：<br />　　你不妨尝试从这里提问和回答问题，很多不错的Q&amp;A资源......</p>
		<p>　　(1) .alt.comp.lang.learn.c-c++<br />　　这个简单些，如果你和我一样是个菜鸟</p>
		<p>　　(2) .comp.lang.c++.moderated<br />嗯，这个显然水平高一些</p>
		<p>　　(3) .comp.std.c++<br />　　如果你需要讨论标准C++相关话题的话</p>
		<p>　　8，不得不写的结束语</p>
		<p>　　结束的时候也是总结现状，展望未来的时候。虽然C++从脱胎于C开始，一路艰<br />难坎坷的走过来，但是无论如何C++已经取得了工业基础的地位。文章列举的大量相关<br />资源就是最好的证明，而业界的大量用C++写成的产品代码以及大量的C++职业工程<br />师则是最直接的证明。同时，我们可以看到各个高校的计算机专业都开设有C++这门<br />课程，网络上对于C++的学习讨论也从来都没有停过。但是，在Java和.NET两大企业<br />开发平台的围攻下，给人的感觉是C++越来越“不行”了。</p>
		<p>　　C++在面向企业的软件开发中，在开发便捷性等方面的确要比Java和C#差很多，<br />其中一个问题是C++语言本身比较复杂，学习曲线比较陡峭，另外一个问题是C++标<br />准化的时间太长，丧失了很多的壮大机会，耗费了很多精力在厂商的之间的斗争上<br />，而C++的标准库离一个完善的程序开发框架还缺少太多太多的内容，各个第三方的<br />类库和框架又在一致性和完整性上没法和随平台提供的框架相提并论。难道C++真的<br />要退出历史舞台了？</p>
		<p>　　从C++目前的活跃程度，以及应用现状来说是完全能够肯定C++仍然是软件工业<br />的基础，也不会退出历史舞台的。另外从Boost，Loki这些库中我们也能够看到C++<br />的发展非常活跃，对于新技术新思维非常激进，C++仍然广泛受到关注。从ACE在高<br />性能通信领域的应用，以及MTL这样的库在数值计算领域的出色表现，我们可以看到<br />C++在高性能应用场合下的不可替代的作用，而嵌入式系统这样的内存受限开发平台<br />，比如Symbian OS上，C++已经发挥着并且将发挥更大的作用。可以预见的是以后的<br />软件无论上层的应用怎么变，它的底层核心都会是由C/C++这样的系统级软件编写的<br />，比如Java虚拟机，.NET Framwork。因为只有这样的系统级软件才能完全彻底的发<br />挥机器的功能。</p>
		<p>　　需要看到的是两个趋势，一个趋势是C++变得更加复杂，更加学院派，通过模板<br />等有潜力的语法因素构造越来越精巧的库成为了现代C++的热点，虽然在利用库实现<br />新的编程范式，乃至设计模式等方面很有开创意义，也确实产生了一些能够便捷开<br />发的工具，但是更多的是把C++变得更加强大，更加复杂，也更加难懂，似乎也更加<br />学院派，不得不说它正在向边缘化道路发展。另一个趋势是C++在主流的企业应用开<br />发中已经逐渐退出了，ERP这样的企业软件开发中基本上不会考虑C++，除非需要考<br />虑性能或者和遗留代码的集成这些因素。C++退守到系统级别语言，成为软件工业的<br />基础是大势所趋。然而反思一下，真的是退守么？自从STL出现，无数的人风起云涌<br />的开始支持C++,他们狂呼“我看到深夜消失了，目标软件工程的出现。我看到了可<br />维护的代码。”是的，STL在可维护性下做得如此出色。但是又怎样呢？STL为C++铺<br />平了现代软件工程的道路，而在上层应用程序软件开发领域这块场地早不单独属于<br />C++,很多程序设计语言都做得很出色，疯狂的支持者会毫不犹豫地说我们应当支持<br />C++,因为它是世界上最棒的语言。而坦率地说，你的腰杆真的那么硬么？也许只是<br />在逃避一些事实。C++是优秀的，这不可否认，STL的出现让C++一度走上了最辉煌的<br />时刻，然而现在看来……我的一位恩师曾言：真正能够将STL应用得淋漓尽致的人很<br />保守地说国内也不超过200人，或许不加入STL能够使C++向着它应当发展的方向发展<br />的更好，而现在看来，C++也应当回首到真正属于他的那一片圣地上……</p>
		<p>参考资料</p>
		<p>本文成文时参考了以下资源：</p>
		<p>1、《程序员》2004年2月，3月，“C++ 程序设计之四书五经” 荣耀<br />2、水'木清华BBS C++版精华区<br />3、<a href="http://jjhou.csdn.net/">http://jjhou.csdn.net</a><br />4、<a href="http://www.royaloo.com/">http://www.royaloo.com</a><br />5、<a href="http://www.zengyihome.net/">http://www.zengyihome.net</a><br />6、C/C++ 开发人员：充实您的 XML 工具箱 </p>
<img src ="http://www.cppblog.com/Lee/aggbug/74811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-25 00:26 <a href="http://www.cppblog.com/Lee/archive/2009/02/25/74811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>悲观程序员的五件武器(转)</title><link>http://www.cppblog.com/Lee/archive/2009/02/25/74809.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Tue, 24 Feb 2009 16:21:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/25/74809.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/74809.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/25/74809.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/74809.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/74809.html</trackback:ping><description><![CDATA[
		<p>
				<a href="http://blog.gkong.com/more.asp?name=linkman&amp;id=27854">http://blog.gkong.com/more.asp?name=linkman&amp;id=27854</a>
				<br />我不知道，自己现在还算不算一个程序员。如果还算程序员的话，我肯定不是那种绝顶聪明的程序员。</p>
		<p>我不是一个聪明的程序员，不能在键盘上手指翻飞，灵光似剑，一日千行，闭目成章。大师的高度，远非我能指望，我会犯很多错误，只是一个普通的程序员。</p>
		<p>所以，对于编程，我是一个悲观主义者。</p>
		<p>我不相信，所编写的程序能够一次编译通过；也不相信，能在家里将程序的所有错误都找出，而不需要出差现场；更不相信，我的程序能够在不同的环境下，对各种异常，都处理得非常完美；尤不相信，我的程序没有任何内存丢失，可以连续运行一周。</p>
		<p>我本来不是一个悲观主义者，曾经的我，是那么激扬那么狂妄，只是一次次被打击，让我越来越务实，越来越冷静，越来越清醒地看待自己。随着岁月的增长，我编程的次数已越来越少，但是，我的悲观主义思想却越来越浓。</p>
		<p>一打开程序，我便想到，因为软件出错，而不得不给用户写检讨；便想到，因为每月死机一次，客户对我大发雷霆；便想到，因为产品质量问题，而陪客户喝酒，连饮七大瓶啤酒。</p>
		<p>那七瓶要命的啤酒，依然不能让客户回心转意，于是，我成了一个悲观程序员。</p>
		<p>我是悲观主义程序员，好在还有五件武器。</p>
		<p>第一件武器：断言（ASSERT）；</p>
		<p>我希望，任何调用我的模块的程序，都能按照希望的参数格式和调用方法，正确地调用我的模块。因此，在我所编写的每一个模块内，都会大量地使用断言（ASSERT），在模块中加上了断言，我便相信，程序模块有了一个一个相对真实的调用环意，便有了一种虚幻的安全感。</p>
		<p>第二件武器：静态代码检测工具，如PC-lint，有时也使用编译器的最严格的编译级别；</p>
		<p>我从不认为，自己是一个对C/C++/VC等，都非常熟悉的程序员，经常会不小心使用一些不正常的语法，或是不太考虑字段的边界，因此，在程序编到一定的阶段，都会采用pc-lint，对我所编写的程序，进行严格的编译检查。</p>
		<p>第三件武器：动态代码检测工具，如boundcheck；</p>
		<p>对于C/C++程序员而言，最大的痛苦就是内存泄漏，或其它资源泄漏了，我对内存泄漏有天生的恐惧，也经常在内存丢失方面犯错误，因此，在产品发布给用户前，一定会采用动态代码检测工具，进行一次彻底的测试。</p>
		<p>第四件武器：单元测试工具，如cppunit；</p>
		<p>我没有足够的自信，认为自己能够很好地驾驭多个模块的大型程序，也不相信自己写过的、超过50行的程序会没有问题，因此，我会尽量引入单元测试，对每一个重要的函数或模块进行地毯式单元测试，当看到那一遍测试通过的绿色，才能够安心地回家睡觉。</p>
		<p>第五件武器：调试信息；</p>
		<p>我相信，我所编写的所有程序，都不可能一次成功，即便再认真地调试检查，再多地厂内工作，在现场还是免不了会出问题。因为，不可能在家里模拟现场所有的情况，也不能够对各种异常情况进行完整地猜测。因此，在我所编写的很多程序中，特别是与监控有关的、需要长期、连续运行的程序，都会加上尽可能多的调试信息。</p>
		<p>在程序中加上调试信息，是我最后的稻草，有了它，我终于敢将产品战战兢兢地交给客户。</p>
		<p>那么，调试信息应该记录哪些内容？我想说的是，调试信息应该能够记录现场所有的信息，包括：</p>
		<p>程序的启停状态；<br />调用它人程序的边界参数；<br />被它人调用的程序的边界参数；<br />与外部环境的边界，包括操作系统、文件系统、硬件、数据库等；<br />与网络交互的两端边界；<br />重要模块的被调用参数；<br />模块内的重要过程的当前参数；</p>
		<p>有了这些调试信息，我便可以不出差了，当现场发生了事情时，我的第一反应便是要求查看这些调试信息。</p>
		<p>今天一位朋友问我，你如何保证你的程序能够稳定，我告诉他：我有五件武器。</p>
		<p>宝刀配英雄，现在我已很少编写程序了，这些武器，就送给战斗在第一线的程序员吧，也许你们现在不觉得它们有多重要，但总有一天，你们会自觉地将它们带在身边的。</p>
<img src ="http://www.cppblog.com/Lee/aggbug/74809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-25 00:21 <a href="http://www.cppblog.com/Lee/archive/2009/02/25/74809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二进制、八进制、十进制、十六进制之间转换（转）</title><link>http://www.cppblog.com/Lee/archive/2009/02/13/73736.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Fri, 13 Feb 2009 10:15:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/13/73736.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73736.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/13/73736.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73736.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73736.html</trackback:ping><description><![CDATA[
		<h1 class="block_title">
				<font style="BACKGROUND-COLOR: #ffffff" color="#000000">一、 十进制与二进制之间的转换 <br />（1） 十进制转换为二进制，分为整数部分和小数部分 <br />① 整数部分 <br />方法：除2取余法，即每次将整数部分除以2，余数为该位权上的数，而商继续除以2，余数又为上一个位权上的数，这个步骤一直持续下去，直到商为0为止，最后读数时候，从最后一个余数读起，一直到最前面的一个余数。下面举例： <br />例：将十进制的168转换为二进制 <br /><br />得出结果 将十进制的168转换为二进制，（10101000）2 <br />分析:第一步，将168除以2,商84,余数为0。 <br />第二步，将商84除以2，商42余数为0。 <br />第三步，将商42除以2，商21余数为0。 <br />第四步，将商21除以2，商10余数为1。 <br />第五步，将商10除以2，商5余数为0。 <br />第六步，将商5除以2，商2余数为1。 <br />第七步，将商2除以2，商1余数为0。 <br />第八步，将商1除以2，商0余数为1。 <br />第九步，读数，因为最后一位是经过多次除以2才得到的，因此它是最高位，读数字从最后的余数向前读，即10101000 <br /><br />（2） 小数部分 <br />方法：乘2取整法，即将小数部分乘以2，然后取整数部分，剩下的小数部分继续乘以2，然后取整数部分，剩下的小数部分又乘以2，一直取到小数部分 <br />为零为止。如果永远不能为零，就同十进制数的四舍五入一样，按照要求保留多少位小数时，就根据后面一位是0还是1，取舍，如果是零，舍掉，如果是1，向入一位。换句话说就是0舍1入。读数要从前面的整数读到后面的整数，下面举例： <br />例1：将0.125换算为二进制 <br /><br />得出结果：将0.125换算为二进制（0.001）2 <br />分析：第一步，将0.125乘以2，得0.25,则整数部分为0,小数部分为0.25; <br />第二步, 将小数部分0.25乘以2,得0.5,则整数部分为0,小数部分为0.5; <br />第三步, 将小数部分0.5乘以2,得1.0,则整数部分为1,小数部分为0.0; <br />第四步,读数,从第一位读起,读到最后一位,即为0.001。 <br /><br /><br />例2,将0.45转换为二进制（保留到小数点第四位） <br /><br /><br />大家从上面步骤可以看出，当第五次做乘法时候，得到的结果是0.4，那么小数部分继续乘以2，得0.8，0.8又乘以2的，到1.6这样一直乘下去，最后不可能得到小数部分为零，因此，这个时候只好学习十进制的方法进行四舍五入了，但是二进制只有0和1两个，于是就出现0舍1入。这个也是计算机在转换中会产生误差，但是由于保留位数很多，精度很高，所以可以忽略不计。 <br />那么，我们可以得出结果将0.45转换为二进制约等于0.0111 <br />上面介绍的方法是十进制转换为为二进制的方法，需要大家注意的是： <br />1） 十进制转换为二进制，需要分成整数和小数两个部分分别转换 <br />2） 当转换整数时，用的除2取余法，而转换小数时候，用的是乘2取整法 <br />3） 注意他们的读数方向 <br />因此，我们从上面的方法，我们可以得出十进制数168.125转换为二进制为10101000.001,或者十进制数转换为二进制数约等于10101000.0111。 <br /><br />（3） 二进制转换为十进制 不分整数和小数部分 <br />方法：按权相加法，即将二进制每位上的数乘以权，然后相加之和即是十进制数。例 <br />将二进制数101.101转换为十进制数。 <br /><br />得出结果：（101.101）2=(5.625)10 <br />大家在做二进制转换成十进制需要注意的是 <br />1） 要知道二进制每位的权值 <br />2） 要能求出每位的值 <br /><br /><br />二、 二进制与八进制之间的转换 <br />首先，我们需要了解一个数学关系，即23=8，24=16，而八进制和十六进制是用这 <br />关系衍生而来的，即用三位二进制表示一位八进制，用四位二进制表示一位十六进制数。 <br />接着，记住4个数字8、4、2、1（23=8、22=4、21=2、20=1）。现在我们来练习二进制与八进制之间的转换。 <br />（1） 二进制转换为八进制 <br />方法：取三合一法，即从二进制的小数点为分界点，向左（向右）每三位取成一位，接着将这三位二进制按权相加，得到的数就是一位八位二进制数，然后，按顺序进行排列，小数点的位置不变，得到的数字就是我们所求的八进制数。如果向左（向右）取三位后，取到最高（最低）位时候，如果无法凑足三位，可以在小数点最左边（最右边），即整数的最高位（最低位）添0，凑足三位。例 <br />①将二进制数101110.101转换为八进制 <br /><br />得到结果：将101110.101转换为八进制为56.5 <br /><br />② 将二进制数1101.1转换为八进制 <br /><br />得到结果：将1101.1转换为八进制为15.4 <br /><br />（2） 将八进制转换为二进制 <br />方法：取一分三法，即将一位八进制数分解成三位二进制数，用三位二进制按权相加去凑这位八进制数，小数点位置照旧。例： <br />① 将八进制数67.54转换为二进制 <br /><br />因此，将八进制数67.54转换为二进制数为110111.101100，即110111.1011 <br />大家从上面这道题可以看出，计算八进制转换为二进制 <br />首先，将八进制按照从左到右，每位展开为三位，小数点位置不变 <br />然后，按每位展开为22，21，20（即4、2、1）三位去做凑数，即a×22+ b×21 +c×20=该位上的数（a=1或者a=0，b=1或者b=0，c=1或者c=0）,将abc排列就是该位的二进制数 <br />接着，将每位上转换成二进制数按顺序排列 <br />最后，就得到了八进制转换成二进制的数字。 <br />以上的方法就是二进制与八进制的互换，大家在做题的时候需要注意的是 <br />1） 他们之间的互换是以一位与三位转换，这个有别于二进制与十进制转换 <br />2） 大家在做添0和去0的时候要注意，是在小数点最左边或者小数点的最右边（即整数的最高位和小数的最低位）才能添0或者去0，否则将产生错误 <br /><br />三、 二进制与十六进制的转换 <br />方法：与二进制与八进制转换相似，只不过是一位（十六）与四位（二进制）的转换，下面具体讲解 <br />（1） 二进制转换为十六进制 <br />方法：取四合一法，即从二进制的小数点为分界点，向左（向右）每四位取成一位，接着将这四位二进制按权相加，得到的数就是一位十六位二进制数，然后，按顺序进行排列，小数点的位置不变，得到的数字就是我们所求的十六进制数。如果向左（向右）取四位后，取到最高（最低）位时候，如果无法凑足四位，可以在小数点最左边（最右边），即整数的最高位（最低位）添0，凑足四位。 <br />①例：将二进制11101001.1011转换为十六进制 <br /><br />得到结果：将二进制11101001.1011转换为十六进制为E9.B <br /><br /><br />② 例：将101011.101转换为十六进制 <br /><br />因此得到结果：将二进制101011.101转换为十六进制为2B.A <br /><br /><br /><br />(2)将十六进制转换为二进制 <br />方法：取一分四法，即将一位十六进制数分解成四位二进制数，用四位二进制按权相加去凑这位十六进制数，小数点位置照旧。 <br />①将十六进制6E.2转换为二进制数 <br /><br />因此得到结果：将十六进制6E.2转换为二进制为01101110.0010即110110.001 <br /><br />四、八进制与十六进制的转换 <br />方法：一般不能互相直接转换，一般是将八进制（或十六进制）转换为二进制，然后再将二进制转换为十六进制（或八进制），小数点位置不变。那么相应的转换请参照上面二进制与八进制的转换和二进制与十六进制的转 <br /><br /><br />五、八进制与十进制的转换 <br />（1）八进制转换为十进制 <br />方法：按权相加法，即将八进制每位上的数乘以位权，然后相加之和即是十进制数。 <br />例：①将八进制数67.35转换为十进制 <br /><br />（2）十进制转换为八进制 <br />十进制转换成八进制有两种方法： <br />1）间接法：先将十进制转换成二进制，然后将二进制又转换成八进制 <br />2）直接法：前面我们讲过，八进制是由二进制衍生而来的，因此我们可以采用与十进制转换为二进制相类似的方法，还是整数部分的转换和小数部分的转换，下面来具体讲解一下： <br />①整数部分 <br />方法：除8取余法，即每次将整数部分除以8，余数为该位权上的数，而商继续除以8，余数又为上一个位权上的数，这个步骤一直持续下去，直到商为0为止，最后读数时候，从最后一个余数起，一直到最前面的一个余数。 <br />②小数部分 <br />方法：乘8取整法，即将小数部分乘以8，然后取整数部分，剩下的小数部分继续乘以8，然后取整数部分，剩下的小数部分又乘以8，一直取到小数部分为零为止。如果永远不能为零，就同十进制数的四舍五入一样，暂取个名字叫3舍4入。 <br />例：将十进制数796.703125转换为八进制数 <br />解：先将这个数字分为整数部分796和小数部分0.703125 <br />整数部分 <br /><br />小数部分 <br /><br />因此，得到结果十进制796.703125转换八进制为1434.55 <br />上面的方法大家可以验证一下，你可以先将十进制转换，然后在转换为八进制，这样看得到的结果是否一样 <br /><br />六、十六进制与十进制的转换 <br />十六进制与八进制有很多相似之处，大家可以参照上面八进制与十进制的转换自己试试这两个进制之间的转换。 <br />通过上面对各种进制之间的转换，我们可以将前面的转换图重新完善一下： <br /><br /><br />本文介绍了二进制、十进制、八进制、十六进制四种进制之间相互的转换，大家在转换的时候要注意转换的方法，以及步骤，特别是十进制转换为期于三种进制之间，要分为整数部分和小数部分，最后就是小数点的位置。但是要保证考试中不出现错误还是需要大家经常练习，这样才能熟能生巧。 </font>
		</h1>
<img src ="http://www.cppblog.com/Lee/aggbug/73736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-13 18:15 <a href="http://www.cppblog.com/Lee/archive/2009/02/13/73736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>英文简历词汇大全(转)</title><link>http://www.cppblog.com/Lee/archive/2009/02/13/73710.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Fri, 13 Feb 2009 04:50:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/13/73710.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73710.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/13/73710.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73710.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73710.html</trackback:ping><description><![CDATA[
		<div>个人资料<br />name 姓名<br />alias 别名<br />pen name 笔名<br />date of birth 出生日期<br />birth date 出生日期<br />born 出生于<br />birth place 出生地点<br />age 年龄<br />native place 籍贯<br />province 省<br />city 市<br />autonomous region 自治区<br />prefecture 专区<br />county 县<br />nationality 民族，国籍<br />citizenship 国籍<br />duel citizenship 双重国籍<br />address 地址<br />current address 目前地址<br />present address 目前地址<br />permanent address 永久地址<br />postal code 邮政编码<br />home phone 住宅电话<br />office phone 办公电话<br />business phone 办公电话<br />Tel.电话<br />sex 性别<br />male 男<br />female 女<br />height 身高<br />weight 体重<br />marital status 婚姻状况<br />family status 家庭状况<br />married 已婚<br />single/unmarried 未婚<br />divorced 离异<br />separated 分居<br />number of children 子女人数<br />none 无<br />street 街<br />lane 胡同，巷<br />road 路<br />district 区<br />house number 门牌<br />health 健康状况<br />health condition 健康状况<br />blood type 血型<br />short-sighted 近视<br />far-sighted 远视<br />color-blind 色盲<br />ID card No.身份证号码<br />date of availability 可到职时间<br />available 可到职<br />membership 会员，资格<br />president 会长<br />vice-president 副会长<br />director 理事<br />standing director 常务理事<br />secretary general 秘书长<br />society 学会<br />association 协会<br />research society 研究会</div>
		<div> </div>
		<div>教育程度</div>
		<div> </div>
		<div>education 学历<br />educational background 教育程度<br />educational history 学历<br />curriculum 课程<br />major 主修<br />minor 副修<br />educational highlights 课程重点部分<br />curriculum included 课程包括<br />specialized courses 专门课程<br />courses taken 所学课程<br />courses completed 所学课程<br />special training 特别训练<br />social practice 社会实践<br />part-time jobs 业余工作<br />summer jobs 暑期工作<br />vacation jobs 假期工作<br />refresher course 进修课程<br />extracurricular activities 课外活动<br />physical activities 体育活动<br />recreational activities 娱乐活动<br />academic activities 学术活动<br />social activities 社会活动<br />rewards 奖励<br />scholarship 奖学金<br />“Three Goods” student 三好学生<br />excellent League member 优秀团员<br />excellent leader 优秀干部<br />student council 学生会<br />off-job training 脱产培训<br />in-job training 在职培训<br />educational system 学制<br />academic year 学年<br />semester 学期（美）<br />term 学期 （英）<br />president 校长<br />vice-president 副校长<br />dean 院长<br />assistant dean 副院长<br />academic dean 教务长<br />department chairman 系主任<br />professor 教授<br />associate professor 副教授<br />guest professor 客座教授<br />lecturer 讲师<br />teaching assistant助教<br />research fellow 研究员<br />research assistant 助理研究员<br />supervisor 论文导师<br />principal 中学校长（美）<br />headmaster 中学校长（英）<br />master 小学校长 （美）<br />dean of studies 教务长<br />dean of students 教导主任<br />dean of students 教导主任<br />teacher 教师<br />probation teacher 代课教师<br />tutor 家庭教师<br />governess 女家庭教师<br />intelligence quotient 智商<br />pass 及格<br />fail 不及格<br />marks 分数<br />grades 分数<br />scores 分数<br />examination 考试<br />grade 年级<br />class 班级<br />monitor 班长<br />vice-monitor副班长<br />commissary in charge of studies 学习委员<br />commissary in charge of entertainment 文娱委员<br />commissary in charge of sports 体育委员<br />commissary in charge of physical labor 劳动委员<br />Party branch secretary 党支部书记<br />League branch secretary 团支部书记<br />commissary in charge of organization 组织委员<br />commissary in charge of publicity 宣传委员<br />degree 学位<br />post doctorate 博士后<br />doctor (Ph.D) 博士<br />master 硕士<br />bachelor 学士<br />student 学生<br />graduate student研究生<br />abroad student 留学生<br />returned student 回国留学生<br />foreign student 外国学生<br />undergraduate 大学肄业生<br />senior 大学四年级学生；高中三年级学生<br />Junior 大学三年级学生；高中二年级学生<br />sophomore 大学二年级学生；高中一年级学生<br />freshman 大学一年级学生<br />guest student 旁听生（英）<br />auditor 旁听生（美）<br />government-supported student 公费生<br />commoner 自费生<br />extern 走读生<br />day-student 走读生<br />intern 实习生<br />prize fellow 奖学金生<br />boarder 寄宿生<br />classmate 同班同学<br />schoolmate 同校同学<br />graduate 毕业生</div>
		<div> </div>
		<div>工作经历</div>
		<div> </div>
		<div>accomplish 完成（任务等）<br />achievements 工作成就，业绩<br />adapted to 适应于<br />adept in 善于<br />administer 管理<br />advanced worker 先进工作者<br />analyze 分析<br />appointed 被任命的<br />assist 辅助<br />authorized 委任的；核准的<br />be promoted to 被提升为<br />be proposed as 被提名为；被推荐为<br />behave 表现<br />breakthrough 惊人的进展，关键问题的解决<br />break the record 打破记录<br />business background 工作经历<br />business experience 工作经历<br />business history 工作经历<br />conduct 经营，处理<br />control 控制<br />cost 成本；费用<br />create 创造<br />decrease 减少<br />demonstrate 证明，示范<br />design 设计<br />develop 开发，发挥<br />devise 设计，发明<br />direct 指导<br />double 加倍，翻一番<br />duties　职责<br />earn 获得，赚取<br />effect 效果，作用<br />eliminate 消除<br />employment experience工作经历<br />employment record 工作经历<br />employment 工作<br />enlarge 扩大<br />enliven 搞活<br />enrich 使丰富<br />establish 设立（公司等）；使开业；确立<br />evaluation 估价，评价<br />excellent League member 优秀团员<br />excellent Party member 优秀党员<br />execute 实行，实施<br />expand 推广；扩大<br />expedite 加快；促进<br />experience 经历<br />exploit开发（资源，产品）<br />export 出口<br />found 创立<br />generate 产生<br />good at 擅长于<br />guide 指导；操纵<br />implement 完成，实施<br />import 进口<br />improve 改进，提高<br />increase 增加<br />influence 影响<br />initiate 创始，开创<br />innovate 改革，革新<br />inspired 受启发的；受鼓舞的<br />install 安装<br />integrate 使结合；使一体化<br />introduce 采用，引进<br />invent 发明<br />invest 投资<br />job title 职位<br />justified 经证明的；合法化的<br />launch 开办（新企业）<br />lead 领导<br />lengthen 延长<br />lessen 减少（生产成本）<br />level 水平<br />localize 使地方化<br />maintain 保持；维修<br />make 制造<br />manage 管理，经营<br />manufacture 制造<br />mastered 精通的<br />modernize 使现代化<br />motivate 促进，激发<br />negotiate 谈判<br />nominated 被提名的；被任命的<br />occupational history 工作经历<br />operate 操作，开动（机器等），经营（厂矿）<br />organize 组织<br />originate 创始，发明<br />overcome 克服（困难等）<br />participate in 参加<br />perfect 使完善；改善<br />perform 执行，履行<br />plan 计划<br />position 职位<br />professional history 职业经历<br />professional 职业经历<br />profit 利润<br />promote 生产，制造<br />promote 推销（商品）；创立（企业）等<br />provide 提供，供应<br />raise 提高<br />reach 达到<br />realize 实现（目标等）；获得（利润）<br />receive 收到，得到，接受<br />recognize 认清（职责等）<br />recommended 被推荐的；被介绍的<br />reconsolidate 重新巩固；重新整顿<br />reconstruct 重建<br />recorded 记载的<br />recover恢复；弥补<br />rectify 整顿，调整<br />redouble 加倍，倍增<br />reduce 减少，降低（成本等）<br />refine 精练，精制<br />reform 改革<br />regenerate 更新，使更生<br />registered 已注册的<br />regularize 使系统化<br />regulate 控制（费用等）<br />rehandle 重铸；重新处理<br />rehash以新形式处理（旧材料）<br />reinforce 加强<br />reckon　计算（成本等）<br />renew 重建，换新<br />renovate 革新；修理<br />repair 修复，修补<br />replace 接替，替换<br />representative 代表，代理人<br />research 调查，研究<br />resolve 解决<br />responsibilities 职责<br />second job 第二职业<br />set 创造（纪录等）<br />settle 解决（问题等）<br />shorten 减低……效能<br />show 显示,表明<br />significant 重要的,有效的<br />simplify 简化,精简<br />solve 解决<br />sort out 清理<br />specific experience 具体经历<br />speed up 加速<br />sponsor 主办<br />spread 传播,扩大<br />standard 标准,规格<br />streamline 把……设计流线型<br />strengthen 加强,巩固<br />study研究<br />succeed 成功<br />supervise 监督,管理<br />supply 供给,满足(需要)<br />systematize 使系统化<br />target 目标,指标<br />test 试验,检验<br />top 头等的,最高的<br />total 总数,总额<br />translate 翻译,转化<br />travel 旅行<br />unify 使成一体,统一<br />use 使用，运用<br />useful 有用的<br />utilize 利用<br />valuable 有价值的<br />vivify 使活跃<br />well-trained 训练有素的<br />work experience 工作经历<br />work history 工作经历<br />work 工作,起作用<br />working model 劳动模范<br />worth 使……钱的,有……价值的</div>
		<div> </div>
		<div>个人品质</div>
		<div> </div>
		<div>able 有才干的，能干的<br />active 主动的，活跃的<br />adaptable 适应性强的<br />adroit 灵巧的，机敏的<br />aggressive 有进取心的<br />alert 机灵的<br />ambitious 有雄心壮志的<br />amiable 和蔼可亲的<br />amicable 友好的<br />analytical 善于分析的<br />apprehensive 有理解力的<br />aspiring 有志气的，有抱负的<br />audacious 大胆的，有冒险精神的<br />capable 有能力的，有才能的<br />careful 办事仔细的<br />candid 正直的<br />charitable 宽厚的<br />competent 能胜任的<br />confident 有信心的<br />conscientious 认真的，自觉的<br />considerate 体贴的<br />constructive 建设性的<br />contemplative 好沉思的<br />cooperative 有合作精神的<br />creative 富创造力的<br />dashing 有一股子冲劲的，有拼搏精神的<br />dedicated 有奉献精神的<br />devoted 有献身精神的<br />dependable 可靠的<br />diplomatic 老练的，有策略的<br />disciplined 守纪律的<br />discreet （在行动，说话等方面）谨慎的<br />dutiful 尽职的<br />dynamic 精悍的<br />earnest 认真的<br />well-educated 受过良好教育的<br />efficient 有效率的<br />energetic 精力充沛的<br />enthusiastic 充满热情的<br />expressive 善于表达<br />faithful守信的，忠诚的<br />forceful （性格）坚强的<br />frank 直率的，真诚的<br />friendly 友好的<br />frugal 俭朴的<br />generous 宽宏大量的<br />genteel 有教养的<br />gentle 有礼貌的<br />hard-working 勤劳的<br />hearty 精神饱满的<br />honest 诚实的<br />hospitable 殷勤的<br />humble恭顺的<br />humorous 幽默的<br />impartial 公正的<br />independent 有主见的<br />industrious 勤奋的<br />ingenious 有独创性的<br />initiative 首创精神<br />have an inquiring mind 爱动脑筋<br />intellective 有智力的<br />intelligent 理解力强的<br />inventive 有发明才能的，有创造力的<br />just 正直的<br />kind-hearted 好心的<br />knowledgeable 有见识的<br />learned 精通某门学问的<br />liberal 心胸宽大的<br />logical 条理分明的<br />loyal 忠心耿耿的<br />methodical 有方法的<br />modest 谦虚的<br />motivated 目的明确的<br />objective 客观的<br />open-minded 虚心的<br />orderly 守纪律的<br />original 有独创性的<br />painstaking 辛勤的，苦干的，刻苦的<br />practical 实际的<br />precise 一丝不苟的<br />persevering 不屈不挠的<br />punctual 严守时刻的<br />purposeful 意志坚强的<br />qualified 合格的<br />rational 有理性的<br />realistic 实事求是的<br />reasonable 讲道理的<br />reliable 可信赖的<br />responsible 负责的<br />self-conscious 自觉的<br />selfless 无私的<br />sensible 明白事理的<br />sincere 真诚的<br />smart 精明的<br />spirited 生气勃勃的<br />sporting 光明正大的<br />steady 塌实的<br />straightforward 老实的<br />strict 严格的<br />systematic 有系统的<br />strong-willed 意志坚强的<br />sweet-tempered 性情温和的<br />temperate 稳健的<br />tireless 孜孜不倦的</div>
		<div> </div>
		<div>其它内容</div>
		<div> </div>
		<div>objective 目标<br />career objective 职业目标<br />employment objective 工作目标<br />position wanted 希望职位<br />job objective 工作目标<br />position applied for 申请职位<br />position sought 谋求职位<br />position desired 希望职位<br />for more specialized work 为更专门的工作<br />for prospects of promotion 为晋升的前途<br />for higher responsibility 为更高层次的工作责任<br />for wider experience 为扩大工作经验<br />due to close-down of company 由于公司倒闭<br />due to expiry of employment 由于雇用期满<br />offered a more challenging opportunity 获得的更有挑战性的工作机会<br />sought a better job 找到了更好的工作<br />to look for a more challenging opportunity 找一个更有挑战性的工作机会<br />to seek a better job 找一份更好的工作<br /></div>
<img src ="http://www.cppblog.com/Lee/aggbug/73710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-13 12:50 <a href="http://www.cppblog.com/Lee/archive/2009/02/13/73710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转自天涯</title><link>http://www.cppblog.com/Lee/archive/2009/02/12/73525.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Thu, 12 Feb 2009 02:17:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/12/73525.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73525.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/12/73525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73525.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73525.html</trackback:ping><description><![CDATA[
		<div>由于工作性质的关系，我常常需要为公司面试程序员。通常，我会首先要求应聘者做两件事：第一，口头说明虚方法、抽象方法、接口之间的异同和使用场景；第二，脱离IDE，手写一个简单的WinForm程序（例如包括布局整齐的两个文本框和三个按钮、点击按钮弹出消息框显示文本框内容），然后在命令行编译运行。第一题是考面向对象中的继承和多态概念，第二题则是考C# GUI类和关于委托等C#独有特性的基础知识，以及编译、调试技巧。很遗憾，有一大半的应聘者会在这两个简单考题面前败下阵来。尤其是第二个考题，甚至难倒了一些写代码有年头的程序员。为什么？因为这些程序员不具备基本的面向对象知识，更加不理解C#的面向对象实现手法。<br />o(&gt;_&lt;)o ~~</div>
		<div> </div>
		<div>╮(╯_╰)╭</div>
		<div> </div>
		<div>╭∩╮（︶︿︶）╭∩╮</div>
		<div> </div>
		<div>╯﹏╰      ╯﹏╰</div>
		<div> </div>
		<div>(ˉ(∞)ˉ)</div>
		<div> </div>
		<div>(#‵′)凸<br /></div>
<img src ="http://www.cppblog.com/Lee/aggbug/73525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-12 10:17 <a href="http://www.cppblog.com/Lee/archive/2009/02/12/73525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装WTL8.0过程以及WTL的安装包下载</title><link>http://www.cppblog.com/Lee/archive/2009/02/09/73328.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Mon, 09 Feb 2009 11:47:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/09/73328.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73328.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/09/73328.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73328.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73328.html</trackback:ping><description><![CDATA[今天下载了WTL8.0,下面是安装过程<br />1.解压WTL_80.exe到目录D:\Program Files<br />2.打开cmd,进入D:\Program Files\WTL80\AppWiz目录,执行setup80.js(我本机要安装到Visual Studio 2005中,如果你是VS2003那么执行setup71.js)<br />3.将D:\Program Files\WTL80\include下的头文件拷贝到VC的include目录C:\Program Files\Microsoft Visual Studio 8\VC\include下,成功了! <br /><img src ="http://www.cppblog.com/Lee/aggbug/73328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-09 19:47 <a href="http://www.cppblog.com/Lee/archive/2009/02/09/73328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC++ 2005中的CVT1100和LINK1123（转）</title><link>http://www.cppblog.com/Lee/archive/2009/02/09/73327.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Mon, 09 Feb 2009 11:46:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/09/73327.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73327.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/09/73327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73327.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73327.html</trackback:ping><description><![CDATA[
		<h1 class="ContentTitle">
				<font size="4">在使用VC++ 2005 Express版本，利用wxWidgets编译其所提供的范例sample/html/test时，除了针对Unicode编码作了一定的修改之外，编译时，仍然发生了两个在链接期的错误，一个错误的提示为：<br />CVTRES : fatal error CVT1100: 重复的资源。type:MANIFEST, name:1, language:0x0409<br />另一个则提示为：<br />LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏<br />已经到了链接期，应该说，问题就不像编译通不过那么别扭了，而查阅MSDN关于这两个问题的说明，终于找到了解决的方法，现简单的陈述如下：<br />首先，出现这两个问题的原因都是一个，即文件中的现有资源文件和新资源字符串表 ID 冲突。微软也给出了解决这个问题的方法，但是，在现有的情况下，这个方法是靠不住的，因为，不可能不使用wx.rc资源。所以，一个变通的解决方法就是：<br />工程属性-&gt;配置属性-&gt; 清单工具-&gt;输入和输出-&gt;嵌入清单，选择[否]，即可。<br /></font>
		</h1>
<img src ="http://www.cppblog.com/Lee/aggbug/73327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-09 19:46 <a href="http://www.cppblog.com/Lee/archive/2009/02/09/73327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言错题集</title><link>http://www.cppblog.com/Lee/archive/2009/02/09/73283.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Mon, 09 Feb 2009 03:11:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/09/73283.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73283.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/09/73283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73283.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73283.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" width="600" align="center">
				<tbody>
						<tr>
								<td>
										<b>若变量已正确说明为float类型，要通过语句scanf("%f %f %f ",&amp;a,&amp;b,&amp;c);给a赋于10.0，b赋予22.0，c赋予33.0，不正确的输入形式是：</b>
										<br />
										<input type="radio" value="1" name="18" />A.10&lt;回车&gt;22&lt;回车&gt;33&lt;回车&gt;    <input type="radio" value="2" name="18" />B.10.0,22.0,33.0&lt;回车&gt;<br /><input type="radio" value="3" name="18" />C.10.0&lt;回车&gt;22.0 33.0&lt;回车&gt;    <input type="radio" value="4" name="18" />D.10 22&lt;回车&gt;33&lt;回车&gt;<br /><font color="red">错误:您选择的是C,正确答案为B</font><p> </p></td>
						</tr>
						<tr>
								<td>
										<b>为表示关系x大于等于y大于等于z,应使用C语言表达式</b>
										<br />
										<input type="radio" value="1" name="32" />A.(x&gt;=Y)&amp;&amp;(Y&gt;=z)    <input type="radio" value="2" name="32" />B.(x&gt;=Y)AND(y&gt;=z)<br /><input type="radio" checked="" value="3" name="32" />C.(x&gt;=Y&gt;=z)    <input type="radio" value="4" name="32" />D.(x&gt;=Y)&amp;(Y&gt;=z)<br /><font color="red">错误:您选择的是C,正确答案为A</font><p> </p></td>
						</tr>
						<tr>
								<td>
										<b>用数组名作为函数调用时的实参，实际上传送给形参的是</b>
										<br />
										<input type="radio" value="1" name="40" />A.数组首地址    <input type="radio" value="2" name="40" />B.数组的第一个元素值<br /><input type="radio" value="3" name="40" />C.数组中全部元素的值    <input type="radio" value="4" name="40" />D.数组元素的个数<br /><font color="red">错误:您选择的是B,正确答案为A</font><p> </p></td>
						</tr>
						<tr>
								<td>
										<b>表达式1&amp;3&amp;5&amp;7的值为：</b>
										<br />
										<input type="radio" value="1" name="71" />A.1    <input type="radio" value="2" name="71" />B.3<br /><input type="radio" value="3" name="71" />C.5    <input type="radio" value="4" name="71" />D.7<br /><font color="red">错误:您选择的是D,正确答案为A</font><p> </p></td>
						</tr>
						<tr>
								<td>
										<b>假设指针p1已经指向了某个整型变量，要使指针p2也指向同一个变量，则下面各项中正确的是：</b>
										<br />
										<input type="radio" value="1" name="80" />A.p2=**p1    <input type="radio" value="2" name="80" />B.p2=*&amp;p1<br /><input type="radio" value="3" name="80" />C.p2=*p1    <input type="radio" value="4" name="80" />D.p2=&amp;*p1<br /><font color="red">错误:您选择的是B,正确答案为D</font><p><strong>若x=4，则x*=x+2的值为：<br /><input type="radio" value="1" name="77" /></strong>A.36    <input type="radio" value="2" name="77" />B.24<br /><input type="radio" value="3" name="77" />C.18    <input type="radio" value="4" name="77" />D.20<br /><font color="red">错误:您选择的是C,正确答案为B</font></p></td>
						</tr>
				</tbody>
		</table>                  <br />                 <strong>若fp是指向某文件的指针，且feof(fp)的返回值是非零值，则表示：<br />               <input type="radio" value="1" name="75" /></strong>A.已读到此文件末尾    <input type="radio" value="2" name="75" />B.未读到此文件的末尾<br />               <input type="radio" value="3" name="75" />C.此文件已关闭    <input type="radio" value="4" name="75" />D.此文件尚未被打开<br /><font color="red">                错误:您未做出选择,正确答案为A</font> <br /><br /><strong>               以下所列的C语言常量中，错误的是<br />            <input type="radio" value="1" name="13" /></strong>A.0xFF    <input type="radio" value="2" name="13" />B.1.2e0.5<br />            <input type="radio" value="3" name="13" />C.2L    <input type="radio" value="4" name="13" />D.'\72'<br /><font color="red">              错误:您选择的是C,正确答案为B</font><img src ="http://www.cppblog.com/Lee/aggbug/73283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-09 11:11 <a href="http://www.cppblog.com/Lee/archive/2009/02/09/73283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GDI &amp; GDI+ </title><link>http://www.cppblog.com/Lee/archive/2009/02/07/73170.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Sat, 07 Feb 2009 11:37:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/07/73170.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73170.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/07/73170.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73170.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73170.html</trackback:ping><description><![CDATA[
		<strong>1.基本概念<br /><br /></strong>　　GDI在Windows中定义为Graphics Device Interface，即图形设备接口，是Windows API(Application Programming Interface)的一个重要组成部分。它是Windows图形显示程序与实际物理设备之间的桥梁，GDI使得用户无需关心具体设备的细节，而只需在一个虚拟的环境(即逻辑设备)中进行操作。它的桥梁作用体现在：<br /><br />　　(1)用户通过调用GDI函数将逻辑空间的操作转化为具体针对设备驱动程序的调用。<br /><br />　　为实现图形设备无关性，Windows 的绘图操作在一个设备描述表上进行。用户拥有自己的"逻辑坐标"系统，它独立于实际的物理设备，与"设备坐标"相对应。开发Windows应用程序时，程序员关心的是逻辑坐标，我们在逻辑坐标系上绘图，利用GDI将逻辑窗口映射到物理设备上。<br /><br />　　(2)GDI能检测具体设备的能力，并依据具体的设备以最优方式驱动这些设备，完成真实的显示。<br /><br />　　GDI函数大致可分类为：设备上下文函数(如GetDC、CreateDC、DeleteDC)、 画线函数(如LineTo、Polyline、Arc)、填充画图函数(如Ellipse、FillRect、Pie)、画图属性函数(如SetBkColor、SetBkMode、SetTextColor)、文本、字体函数(如TextOut、GetFontData)、位图函数(如SetPixel、BitBlt、StretchBlt)、坐标函数(如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen)、映射函数(如SetMapMode、SetWindowExtEx、SetViewportExtEx)、元文件函数(如PlayMetaFile、SetWinMetaFileBits)、区域函数(如FillRgn、FrameRgn、InvertRgn)、路径函数(如BeginPath、EndPath、StrokeAndFillPath)、裁剪函数(如SelectClipRgn、SelectClipPath)等。<br /><br />　　GDI虽然使程序员得到了一定程度的解脱，但是其编程方式仍很麻烦。譬如，显示一张位图，程序员需要进行"装入位图―读取位图文件头信息―启用设备场景―调色板变换"等一连串操作。而有了GDI+，这些问题便迎刃而解了。<br /><br />　　顾名思义，GDI+是GDI的增强版。它是微软在Windows 2000以后操作系统中提供的新接口，其通过一套部署为托管代码的类来展现，这套类被称为GDI+的"托管类接口"。GDI+主要提供了以下三类服务:<br /><br />　　(1) 二维矢量图形：GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类；<br /><br />　　(2) 图像处理：大多数图片都难以划定为直线和曲线的集合，无法使用二维矢量图形方式进行处理。因此，GDI+为我们提供了Bitmap、Image等类,它们可用于显示、操作和保存BMP、JPG、GIF等图像格式。<br /><br />　　(3) 文字显示：GDI+支持使用各种字体、字号和样式来显示文本。<br /><br />　　GDI接口是基于函数的，而GDI+是基于C++类的对象化的应用程序编程接口，因此使用起来比GDI要方便。<br /><br />　　<strong>2.例程简述</strong><br /><br />　　单击此处下载本文例程源代码。<br /><br />　　本文后续的讲解都基于这样的一个例子工程(例程的开发环境为Visual C++6.0，操作系统为Windows XP)，它是一个基于对话框的MFC应用程序，包括2个父菜单：<br /><br />　　(1) GDI<br /><br />　　GDI父菜单下包括一个子菜单：<br /><br />ID：IDM_GDI_DRAW_LINE caption：画线<br /><br />　　单击事件：在窗口绘制正旋曲线<br /><br />　　(2) GDI+<br /><br />　　DIB位图父菜单下包括两个子菜单：<br /><br />a. ID：IDM_GDIP_DRAW_LINE caption：画线<br /><br />　　单击事件：在窗口绘制正旋曲线<br /><br />b. caption：新增功能，其下又包括下列子菜单：<br /><br />　　(ⅰ)ID：IDM_Gradient_Brush caption：渐变画刷<br /><br />　　单击事件：在窗口演示GDI+的渐变画刷功能<br /><br />　　(ⅱ)ID：IDM_Cardinal_Spline caption：基数样条<br /><br />　　单击事件：在窗口演示GDI+的基数样条函数功能<br /><br />　　(ⅲ)ID：IDM_Transformation_Matrix caption：变形和矩阵对象<br /><br />　　单击事件：在窗口演示GDI+的变形和矩阵对象功能<br /><br />　　(ⅳ)ID：IDM_Scalable_Region caption：可伸缩区域<br /><br />　　单击事件：在窗口演示GDI+的可伸缩区域功能<br /><br />　　(ⅴ)ID：IDM_IMAGE caption：图像<br /><br />　　单击事件：在窗口演示GDI+的多种图像格式支持功能<br /><br />　　(ⅵ)ID：IDM_Alpha_Blend caption：Alpha混合<br /><br />　　单击事件：在窗口演示GDI+的Alpha混合功能<br /><br />　　(ⅶ)ID：IDM_TEXT caption：文本<br /><br />　　单击事件：在窗口演示GDI+的强大文本输出能力<br /><br />　　后续篇章将集中在对上述菜单单击事件消息处理函数的讲解，下面的代码是整个对话框类CGdiexampleDlg的消息映射：<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>BEGIN_MESSAGE_MAP(CGdiexampleDlg, CDialog)<br />//{{AFX_MSG_MAP(CGdiexampleDlg)<br />ON_WM_SYSCOMMAND()<br />ON_WM_PAINT()<br />ON_WM_QUERYDRAGICON()<br />ON_COMMAND(IDM_GDI_DRAW_LINE, OnGdiDrawLine)<br />ON_COMMAND(IDM_GDIP_DRAW_LINE, OnGdipDrawLine)<br />ON_COMMAND(IDM_Gradient_Brush, OnGradientBrush)<br />ON_COMMAND(IDM_Cardinal_Spline, OnCardinalSpline)<br />ON_COMMAND(IDM_Transformation_Matrix, OnTransformationMatrix)<br />ON_COMMAND(IDM_Scalable_Region, OnScalableRegion)<br />ON_COMMAND(IDM_IMAGE, OnImage)<br />ON_COMMAND(IDM_Alpha_Blend, OnAlphaBlend)<br />ON_COMMAND(IDM_TEXT, OnText)<br />//}}AFX_MSG_MAP<br />END_MESSAGE_MAP()</td></tr></tbody></table><p><strong>3.GDI编程<br /><br /></strong>　　"GDI"菜单下的"画线"子菜单单击事件消息处理函数的代码如下：<br /><br /></p><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>void CGdiexampleDlg::OnGdiDrawLine()<br />{<br />　// TODO: Add your command handler code here<br />　CClientDC dc(this);<br />　//逻辑坐标与设备坐标变换<br />　CRect rect;<br />　GetClientRect(&amp;rect);<br />　dc.SetMapMode(MM_ANISOTROPIC);<br />　dc.SetWindowOrg(0, 0);<br />　dc.SetWindowExt(rect.right, rect.bottom);<br />　dc.SetViewportOrg(0, rect.bottom / 2);<br />　dc.SetViewportExt(rect.right, - rect.bottom);<br />　//创建绘制正旋曲线的pen并将其选入设备上下文<br />　CPen pen(PS_SOLID, 1, RGB(255, 0, 0));<br />　HGDIOBJ oldObject = dc.SelectObject(pen.GetSafeHandle());<br />　//绘制正旋曲线<br />　dc.MoveTo(0, 0);<br />　for (int i = 0; i &lt; rect.right; i++)<br />　{<br />　　dc.LineTo(i, 100 *sin(2 *(i / (rect.right / 5.0)) *PI));<br />　}<br />　//创建绘制x轴的pen并将其选入设备上下文<br />　CPen penx(PS_SOLID, 1, RGB(0, 0, 255));<br />　dc.SelectObject(penx.GetSafeHandle());<br />　//绘制X轴<br />　dc.MoveTo(0, 0);<br />　dc.LineTo(rect.right, 0);<br />　//恢复原先的pen<br />　dc.SelectObject(oldObject);<br />}</td></tr></tbody></table><br />　　单击这个按钮，会出现如图1所示的效果，我们来对此进行解读。<br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img alt="WindowsGDI和GDI+编程实例全剖析(2)" src="http://image2.sina.com.cn/IT/cr/2005/1111/2929087046.jpg" border="0" /><br />图1 绘制正旋曲线</div></td></tr></tbody></table><br />　　前文提到，GDI编程需进行设备坐标和逻辑坐标的转化。而屏幕上的设备坐标通常会按客户坐标给出，客户坐标依赖于窗口的客户区域，其起始位置位于客户区域的左上角。为示区别，图2给出了设备坐标和用户逻辑坐标的示例。<br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img style="WIDTH: 398px; HEIGHT: 206px" alt="WindowsGDI和GDI+编程实例全剖析(2)" hspace="0" src="http://image2.sina.com.cn/IT/cr/2005/1111/1867704990.jpg" border="1" /><br />图2 设备坐标与逻辑坐标</div></td></tr></tbody></table><br />　　设备坐标与逻辑坐标的转换关系如下：<br /><br /><p align="center"><img style="WIDTH: 292px; HEIGHT: 25px" alt="WindowsGDI和GDI+编程实例全剖析(2)" hspace="0" src="http://image2.sina.com.cn/IT/cr/2005/1111/3687346646.gif" border="1" /><br /><img style="WIDTH: 257px; HEIGHT: 25px" alt="WindowsGDI和GDI+编程实例全剖析(2)" hspace="0" src="http://image2.sina.com.cn/IT/cr/2005/1111/3445173466.gif" border="1" /></p><p>　　公式中的&lt;Xvorg, Yvorg&gt;是设备空间中视口的原点，而&lt; Xworg, Yworg &gt;是逻辑空间中窗口的原点。 Xwext/Xvext和Ywext/Yvext分别是窗口与视口水平和垂直范围的比例。<br /><br />　　因此，经过程序中的dc.SetWindowOrg (0，0) 和dc.SetViewportOrg (0，rect.bottom/2)语句我们设置了视口和窗口的原点；而经过程序中的dc.SetWindowExt (rect.right，rect.bottom) 和dc.SetViewportExt (rect.right，-rect.bottom) 语句我们设置了视口和窗口的范围。由于视口和窗口的纵坐标方向相反，设置视口的垂直范围为负值。这样我们得到了一个逻辑坐标原点为客户区水平方向最左边和垂直方向居中的坐标系，我们在这个坐标系上直接绘制正旋曲线，不需要再理睬Windows对话框客户区坐标了。<br /><br />　　void CGdiexampleDlg::OnGdiDrawLine()函数中未指定逻辑设备和物理设备的映射模式，则为缺省的MM_TEXT。在这种模式下，一个逻辑单位对应于一个像素点。映射模式是GDI中的一个重要概念，其它的映射模式还有MM_LOENGLlSH、MM_HIENGLISH、MM_LOMETRIC和MM_HIMETRIC等。我们可以通过如下语句指定映射模式为MM_TEXT：<br /><br /></p><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>dc.SetMapMode(MM_TEXT);</td></tr></tbody></table><br />　　值得一提的是，从上述代码可以看出：在GDI编程中，几乎所有的操作都围绕设备上下文dc展开。的确，这正是GDI编程的特点！设备上下文是Windows 使用的一种结构，所有GDI操作前都需取得特定设备的上下文，函数中的CClientDC dc (this) 语句完成这一功能。<br /><br />　　归纳可得，利用GDI进行图形、图像处理的一般操作步骤为：<br /><br />　　1. 取得指定窗口的DC；<br /><br />　　2. 确定使用的坐标系及映射方式； <br /><br />　　3. 进行图形、图像或文字处理；<br /><br />　　4. 释放所使用的DC。<br /><br />　　4.GDI+编程<br /><br />　　"GDI+"菜单下的"画线"子菜单单击事件消息处理函数的代码如下： <br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>void CGdiexampleDlg::OnGdipDrawLine()<br />{<br />　// TODO: Add your command handler code here <br />　CClientDC dc(this); <br />　//逻辑坐标与设备坐标变换<br />　CRect rect;<br />　GetClientRect(&amp;rect);<br />　dc.SetMapMode(MM_ANISOTROPIC);<br />　dc.SetWindowOrg(0, 0);<br />　dc.SetWindowExt(rect.right, rect.bottom);<br />　dc.SetViewportOrg(0, rect.bottom / 2);<br />　dc.SetViewportExt(rect.right, - rect.bottom);<br /><br />　//创建Graphics对象<br />　Graphics graphics(dc);<br />　//创建pen<br />　Pen myPen(Color::Red);<br />　myPen.SetWidth(1);<br />　//画正旋曲线<br />　for (int i = 0; i &lt; rect.right; i++)<br />　{<br />　　graphics.DrawLine(&amp;myPen, i, 100 *sin(2 *(i / (rect.right / 5.0)) *PI), i +<br />1, 100 *sin(2 *((i + 1) / (rect.right / 5.0)) *PI));<br />　}<br />　//画X轴<br />　myPen.SetColor(Color::Blue);<br />　graphics.DrawLine(&amp;myPen, 0, 0, rect.right, 0);<br />}</td></tr></tbody></table><br />　　由于我们使用的是Visual C++6.0而非VS.Net，我们需要下载微软的GDIPLUS支持包。在微软官方网站下载时需认证Windows为正版，我们可从这个地址下载：http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip。一个完整的GDI+支持包至少包括如下文件：<br /><br />　　(1)头文件：gdiplus.h<br /><br />　　(2)动态链接库的.lib文件：gdiplus.lib<br /><br />　　(3)动态链接库的.dll文件：gdiplus.dll<br /><br />　　少了(1)、(2)程序不能编译，少了(3)程序能以共享DLL的方式编译但是不能运行，运行时找不到.dll文件。<br /><br />　　为使得Visual C++6.0支持GDI+，我们需要在使用GDI+对象的文件的开头添加如下代码：<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>#define UNICODE<br />#ifndef ULONG_PTR<br />#define ULONG_PTR unsigned long*<br />#endif<br />#include "c:\gdiplus\includes\gdiplus.h"<br />using namespace Gdiplus;<br />#pragma comment(lib, "c:\gdiplus\lib\gdiplus.lib")</td></tr></tbody></table><br />　　在Visual C++中使用GDI+必须先进行GDI+的初始化，我们在CWinApp派生类的InitInstance函数中进行此项工作是最好的：<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td><p>///////////////////////////////////////<br />CGdiexampleApp initialization<br /><br />BOOL CGdiexampleApp::InitInstance()<br />{<br />　AfxEnableControlContainer();<br /><br />　// Standard initialization<br /><br />　#ifdef _AFXDLL<br />　　Enable3dControls(); // Call this when using MFC in a shared DLL<br />　#else<br />　　Enable3dControlsStatic(); // </p><p>Call this when linking to MFC statically<br />　#endif<br /><br />　//初始化gdiplus的环境<br />　GdiplusStartupInput gdiplusStartupInput;<br />　ULONG_PTR gdiplusToken;<br />　// 初始化GDI+.<br />　GdiplusStartup(&amp;gdiplusToken, &amp;gdiplusStartupInput, NULL);<br /><br />　CGdiexampleDlg dlg;<br />　m_pMainWnd = &amp;dlg;<br />　int nResponse = dlg.DoModal();<br />　if (nResponse == IDOK){}<br />　else if (nResponse == IDCANCEL){}<br /><br />　//关闭gdiplus的环境<br />　GdiplusShutdown(gdiplusToken);<br /><br />　return FALSE;<br />}</p></td></tr></tbody></table><br />　　单击"GDI+"菜单下的"画线"子菜单，也会出现如图1所示的效果。观察void CGdiexampleDlg::OnGdipDrawLine() 函数，我们发现用GDI+进行图形、图像操作的步骤为：<br /><br />　　(1)创建 Graphics 对象：Graphics 对象表示GDI+绘图表面，是用于创建图形图像的对象；<br /><br />　　(2)使用 Graphics 对象绘制线条和形状、呈现文本或显示与操作图像。<br /><br />　　Graphics 对象是GDI+的核心，GDI中设备上下文dc和Graphics 对象的作用相似，但在GDI中使用的是基于句柄的编程模式，而GDI+中使用的则是基于对象的编程模式。Graphics封装了GDI+ 绘图面，而且此类无法被继承，它的所有成员函数都不是虚函数。<br /><br />　　下面，我们来逐个用实际代码实现GDI+的新增功能，这些新增功能包括：渐变的画刷(Gradient Brushes)、基数样条函数(Cardinal Splines)、持久的路径对象(Persistent Path Objects)、变形和矩阵对象(Transformations &amp;Matrix Object)、可伸缩区域(Scalable Regions)、Alpha混合(Alpha Blending)和丰富的图像格式支持等。<p><strong>渐变的画刷<br /><br /></strong>　　GDI+提供了用于填充图形、路径和区域的线性渐变画刷和路径渐变画刷。<br /><br />　　线性渐变画刷使用渐变颜色来填充图形。<br /><br />　　当用路径渐变画刷填充图形时，可指定从图形的一部分移至另一部分时画刷颜色的变化方式。例如，我们可以只指定图形的中心颜色和边缘颜色，当画刷从图形中间向外边缘移动时，画刷会逐渐从中心颜色变化到边缘颜色。 <br /><br /></p><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>void CGdiexampleDlg::OnGradientBrush()<br />{<br />　// TODO: Add your command handler code here<br />　CClientDC dc(this);<br />　CRect rect;<br />　GetClientRect(&amp;rect);<br />　//创建Graphics对象<br />　Graphics graphics(dc);<br />　//创建渐变画刷<br />　LinearGradientBrush lgb(Point(0, 0), Point(rect.right, rect.bottom), Color::Blue, Color::Green);<br />　//填充<br />　graphics.FillRectangle(&amp;lgb, 0, 0, rect.right, rect.bottom);<br />}</td></tr></tbody></table><br />　　本程序使用线性渐变画刷，当画刷从客户区左上角移向客户区右下角的过程中，颜色逐渐由蓝色转变为绿色。<br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img style="WIDTH: 491px; HEIGHT: 344px" alt="WindowsGDI和GDI+编程实例全剖析(3)" hspace="0" src="http://image2.sina.com.cn/IT/cr/2005/1111/3410161706.jpg" border="1" /><br />图3 GDI+渐变画刷</div></td></tr></tbody></table><br />　　<strong>基数样条函数</strong><br /><br />　　GDI+支持基数样条，基数样条指的是一连串单独的曲线，这些曲线连接起来形成一条较大的曲线。样条由点(Point结构体)的数组指定，并通过该数组中的每一个点。基数样条平滑地穿过数组中的每一个点(不出现尖角)，因此比用直线连接创建的路径精确。<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>void CGdiexampleDlg::OnCardinalSpline()<br />{<br />　// TODO: Add your command handler code here<br />　CClientDC dc(this);<br />　//创建Graphics对象<br />　Graphics graphics(dc);<br />　Point points[] =<br />　{<br />　　Point(0, 0), Point(100, 200), Point(200, 0), Point(300, 200), Point(400, 00)<br />　};<br />　//直接画线<br />　for (int i = 0; i &lt; 4; i++)<br />　{<br />　　graphics.DrawLine(&amp;Pen(Color::Blue, 3), points[i], points[i + 1]);<br />　}<br />　//利用基数样条画线<br />　graphics.DrawCurve(&amp;Pen(Color::Red, 3), points, 5);<br />}</td></tr></tbody></table><br />　　图4演示了直接连线和经过基数样条平滑拟合后的线条的对比，后者的曲线(Curve)没有尖角。这个工作我们在中学的数学课上把离散的点连接成曲线时做过。<br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img style="WIDTH: 493px; HEIGHT: 344px" alt="WindowsGDI和GDI+编程实例全剖析(3)" hspace="0" src="http://image2.sina.com.cn/IT/cr/2005/1111/2697862847.jpg" border="1" /><br />图4 GDI+基数样条</div></td></tr></tbody></table><p> </p><p><strong>持久的路径对象<br /><br /></strong>　　在GDI中，路径隶属于一个设备上下文，一旦设备环境指针超过它的生存期，路径也会被删除。利用GDI+，可以创建并维护与Graphics对象分开的GraphicsPath 对象，它不依赖于Graphics对象的生存期。<br /><br />　　变形和矩阵对象<br /><br />　　GDI+提供了Matrix对象，它是一种可以使变形(旋转、平移、缩放等) 简易灵活的强大工具，Matrix对象需与要被变形的对象联合使用。对于GraphicsPath类，我们可以使用其成员函数Transform接收Matrix参数用于变形。<br /><br /></p><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>void CGdiexampleDlg::OnTransformationMatrix()<br />{<br />　// TODO: Add your command handler code here<br />　CClientDC dc(this);<br />　//创建Graphics对象<br />　Graphics graphics(dc);<br />　GraphicsPath path;<br />　path.AddRectangle(Rect(250, 20, 70, 70));<br />　graphics.DrawPath(&amp;Pen(Color::Black, 1), &amp;path); // 在应用变形矩阵之前绘制矩形<br />　// 路径变形<br />　Matrix matrix1, matrix2;<br /><br />　matrix1.Rotate(45.0f); //旋转顺时针45度<br />　path.Transform(&amp;matrix1); //应用变形<br />　graphics.DrawPath(&amp;Pen(Color::Red, 3), &amp;path);<br /><br />　matrix2.Scale(1.0f, 0.5f); //转化成为平行四边形法则<br />　path.Transform(&amp;matrix2); //应用变形<br />　graphics.DrawPath(&amp;Pen(Color::Blue, 3), &amp;path);<br />} </td></tr></tbody></table><br />　　图5演示了正方形经过旋转和拉伸之后的效果：黑色的为原始图形，红色的为旋转45度之后的图形，蓝色的为经过拉伸为平行四边形后的图形。 <br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img style="WIDTH: 493px; HEIGHT: 344px" alt="WindowsGDI和GDI+编程实例全剖析(4)" hspace="0" src="http://image2.sina.com.cn/IT/cr/2005/1111/2682685663.jpg" border="1" /><br />图5 GDI+变形和矩阵对象</div></td></tr></tbody></table><br />　　<strong>可伸缩区域<br /></strong><br />　　GDI+通过对区域(Region)的支持极大地扩展了GDI。在GDI 中，区域存储在设备坐标中，可应用于区域的唯一变形是平移。但是在GDI +中，区域存储在全局坐标(世界坐标)中，可对区域利用变形矩阵进行变形(旋转、平移、缩放等)。<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>void CGdiexampleDlg::OnScalableRegion()<br />{<br />　// TODO: Add your command handler code here<br />　CClientDC dc(this);<br />　//创建Graphics对象<br />　Graphics graphics(dc);<br />　//创建GraphicsPath<br />　GraphicsPath path;<br />　path.AddLine(100, 100, 150, 150);<br />　path.AddLine(50, 150, 150, 150);<br />　path.AddLine(50, 150, 100, 100);<br />　//创建Region<br />　Region region(&amp;path);<br />　//填充区域 <br />　graphics.FillRegion(&amp;SolidBrush(Color::Blue), &amp;region);<br />　//区域变形<br />　Matrix matrix;<br />　matrix.Rotate(10.0f); //旋转顺时针20度<br />　matrix.Scale(1.0f, 0.3f); //拉伸<br />　region.Transform(&amp;matrix); //应用变形<br />　//填充变形后的区域 <br />　graphics.FillRegion(&amp;SolidBrush(Color::Green), &amp;region);<br />}</td></tr></tbody></table><br />　　上述程序中以蓝色填充一个三角形区域，接着将此区域旋转和拉伸，再次显示，其效果如图6。<br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img style="WIDTH: 495px; HEIGHT: 345px" alt="WindowsGDI和GDI+编程实例全剖析(4)" hspace="0" src="http://image2.sina.com.cn/IT/cr/2005/1111/3493949473.jpg" border="1" /><br />图6 GDI+区域变形</div></td></tr></tbody></table><p><strong>丰富的图像格式支持<br /><br /></strong>　　GDI +提供了Image、Bitmap 和Metafile 类，方便用户进行图像格式的加载、操作和保存。GDI+支持的图像格式有BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF等，几乎涵盖了所有的常用图像格式。<br /><br /></p><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>void CGdiexampleDlg::OnImage()<br />{<br />　// TODO: Add your command handler code here<br />　CClientDC dc(this);<br />　//创建Graphics对象<br />　Graphics graphics(dc);<br />　Image image(L "d:\1.jpg");<br />　//在矩形区域内显示jpg图像<br />　Point destPoints1[3] =<br />　{<br />　　Point(10, 10), Point(220, 10), Point(10, 290)<br />　};<br />　graphics.DrawImage(&amp;image, destPoints1, 3);<br />　//在平行四边形区域内显示jpg图像<br />　Point destPoints2[3] =<br />　{<br />　　Point(230, 10), Point(440, 10), Point(270, 290)<br />　};<br />　graphics.DrawImage(&amp;image, destPoints2, 3);<br />}</td></tr></tbody></table><br />　　上述程序将D盘根目录下文件名为"1.jpg"的jpg图像以矩阵和平行四边形两种方式显示，效果如图7。<br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img style="WIDTH: 493px; HEIGHT: 344px" alt="WindowsGDI和GDI+编程实例全剖析(5)" hspace="0" src="http://image2.sina.com.cn/IT/cr/2005/1111/3247894246.jpg" border="1" /><br />图7 GDI+多种图像格式支持</div></td></tr></tbody></table><br />　　由此我们可以看出，GDI+在图像显示和操作方面的确比GDI简单许多。回忆我们在《Visual C++中DDB与DIB位图编程全攻略》一文中所介绍的用GDI显示位图的方式，其与GDI+图像处理的难易程度真是有天壤之别。<p><strong>Alpha混合<br /><br /></strong>　　Alpha允许将两个物体混合起来显示，在3D气氛和场景渲染等方面有广泛应用。它能"雾化"图像，使得一个图像着色在另一个半透明的图像上，呈现一种朦胧美。我们知道，一个像素可用R，G，B三个维度来表示，我们可以再加上第4个即：Alpha维度(channel)，表征透明程度。<br /><br /></p><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>void CGdiexampleDlg::OnAlphaBlend()<br />{<br />　// TODO: Add your command handler code here<br />　CClientDC dc(this);<br />　//创建Graphics对象<br />　Graphics graphics(dc);<br />　//创建ColorMatrix<br />　ColorMatrix ClrMatrix =<br />　{<br />　　1.0f, 0.0f, 0.0f, 0.0f, 0.0f,<br />　　0.0f, 1.0f, 0.0f, 0.0f, 0.0f,<br />　　0.0f, 0.0f, 1.0f, 0.0f, 0.0f,<br />　　0.0f, 0.0f, 0.0f, 0.5f, 0.0f,<br />　　0.0f, 0.0f, 0.0f, 0.0f, 1.0f<br />　};<br />　//将ColorMatrix赋给ImageAttributes<br />　ImageAttributes ImgAttr;<br />　ImgAttr.SetColorMatrix(&amp;ClrMatrix, ColorMatrixFlagsDefault,ColorAdjustTypeBitmap);<br />　//在矩形区域内显示jpg图像<br />　Image img1(L "d:\1.jpg");<br />　Point destPoints1[3] =<br />　{<br />　　Point(10, 10), Point(220, 10), Point(10, 290)<br />　};<br />　graphics.DrawImage(&amp;img1, destPoints1, 3);<br />　//Alpha混合<br />　Image img2(L "d:\2.jpg");<br />　int width, height;<br />　width = img2.GetWidth();<br />　height = img2.GetHeight();<br />　graphics.DrawImage(&amp;img2, RectF(10, 10, 210, 280), 0, 0, width, height,UnitPixel, &amp;ImgAttr);<br />　//在平行四边形区域内显示jpg图像<br />　Point destPoints2[3] =<br />　{<br />　　Point(230, 10), Point(440, 10), Point(270, 290)<br />　};<br />　graphics.DrawImage(&amp;img1, destPoints2, 3);<br />　//Alpha混合<br />　graphics.DrawImage(&amp;img2, destPoints2, 3, 0, 0, width, height, UnitPixel,&amp;ImgAttr);<br />}</td></tr></tbody></table><br />　　上述程序中将D盘根目录下文件名为"1.jpg"的图像以矩阵和平行四边形两种方式显示，然后将文件名为为"2.jpg"的图像与之进行混合，其效果如图8。<br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img style="WIDTH: 492px; HEIGHT: 344px" alt="WindowsGDI和GDI+编程实例全剖析(6)" hspace="0" src="http://image2.sina.com.cn/IT/cr/2005/1111/1131810837.jpg" border="1" /><br />图8 GDI+ Alpha混合</div></td></tr></tbody></table><br />　　为了能进行Alpha混合，我们需要使用ImageAttributes类和ColorMatrix矩阵，ImageAttributes可以进行颜色、灰度等调整从而达到控制图像着色方式的目的。ColorMatrix是ImageAttributes类大多数函数的参数，它包含了Alpha、Red、Green、Blue维度的值，以及另一维w，顺序为RGBaw。<br /><br />　　CGdiexampleDlg::OnAlphaBlend()函数中ColorMatrix的实例ClrMatrix中元素(4,4)的值为0.5，表示Alpha度的值为0.5(即半透明)。在ColorMatrix中，元素(5,5)的值恒定为1.0。我们把ClrMatrix的元素(0,0)修改为0.0，即使得图像2.jpg的红色维度全不显示，再看效果，为图9。列位读者，我们以前在豪杰超级解霸中调整R，G，B值从而控制图像输出颜色的时候，调的就是这个东东！图9的效果很像破旧彩色电视机，红色电子枪"嗝"了。刚大学毕业时，俺那个叫穷啊，就买了这么个电视机，还看得很爽，真是往事不堪回首！<br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img style="WIDTH: 493px; HEIGHT: 341px" alt="WindowsGDI和GDI+编程实例全剖析(6)" hspace="0" src="http://image2.sina.com.cn/IT/cr/2005/1111/1780812232.jpg" border="1" /><br />图9 GDI+中的ColorMatrix</div></td></tr></tbody></table><p><strong>强大的文字输出<br /><br /></strong>　　GDI+拥有极其强大的文字输出处理能力，输出文字的颜色、字体、填充方式都可以直接作为Graphics类DrawString成员函数的参数进行设置，其功能远胜过GDI设备上下文的TextOut函数。<br /><br /></p><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>void CGdiexampleDlg::OnText()<br />{<br />　// TODO: Add your command handler code here<br />　CClientDC dc(this);<br />　//创建Graphics对象<br />　Graphics graphics(dc);<br />　//创建20号"楷体"字体<br />　FontFamily fontFamily1(L "楷体_GB2312"); // 定义"楷体"字样<br />　Font font1(&amp;fontFamily1, 20, FontStyleRegular, UnitPoint);<br />　//定义输出UNICODE字符串<br />　WCHAR string[256];<br />　wcscpy(string, L "天极网的读者朋友，您好！");<br />　//以蓝色画刷和20号"楷体"显示字符串<br />　graphics.DrawString(string, (INT)wcslen(string), &amp;font1, PointF(30, 10),&amp;SolidBrush(Color::Blue));<br />　//定义字符串显示画刷<br />　LinearGradientBrush linGrBrush(Point(30, 50), Point(100, 50), Color(255, 255,0, 0), Color(255, 0, 0, 255));<br />　//以线性渐变画刷和创建的20号"楷体"显示字符串<br />　graphics.DrawString(string, (INT)wcslen(string), &amp;font1, PointF(30, 50),&amp;linGrBrush);<br />　//创建20号"华文行楷"字体<br />　FontFamily fontFamily2(L "华文行楷"); // 定义"楷体"字样<br />　Font font2(&amp;fontFamily2, 20, FontStyleRegular, UnitPoint);<br />　//以线性渐变画刷和20号"华文行楷"显示字符串<br />　graphics.DrawString(string, (INT)wcslen(string), &amp;font2, PointF(30, 90),&amp;linGrBrush);<br />　//以图像创建画刷<br />　Image image(L "d:\3.jpg");<br />　TextureBrush tBrush(&amp;image);<br />　//以图像画刷和20号"华文行楷"显示字符串<br />　graphics.DrawString(string, (INT)wcslen(string), &amp;font2, PointF(30, 130),&amp;tBrush);<br />　//创建25号"华文中宋"字体<br />　FontFamily fontFamily3(L "华文中宋"); // 定义"楷体"字样<br />　Font font3(&amp;fontFamily2, 25, FontStyleRegular, UnitPoint);<br />　//以图像画刷和20号"华文行楷"显示字符串<br />　graphics.DrawString(string, (INT)wcslen(string), &amp;font3, PointF(30, 170),&amp;tBrush);<br />}</td></tr></tbody></table><br />　　上述代码的执行效果如图10所示，字体、颜色和填充都很丰富！<br /><img src ="http://www.cppblog.com/Lee/aggbug/73170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-07 19:37 <a href="http://www.cppblog.com/Lee/archive/2009/02/07/73170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何应答英文面试常规问题</title><link>http://www.cppblog.com/Lee/archive/2009/02/06/73121.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Fri, 06 Feb 2009 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/06/73121.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73121.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/06/73121.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73121.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73121.html</trackback:ping><description><![CDATA[    <b>1. Tell me about you! </b><br /><br />    Keep your answer to one or two minutes; don't ramble. Use your resume summary as a base to start. <br /><br />    <b>2. What do you know about our company? </b><br /><br />    Do your homework before the interview! Spend some time online or at the library researching the company. Find out as much as you can, including products, size, income, reputation, image, management talent, people, skills, history and philosophy. Project an informed interest; let the interviewer tell you about the company. <br /><br />    <b>3. Why do you want to work for us? </b><br /><br />    Don't talk about what you want; first, talk about their needs: You would like to be part of a specific company project; you would like to solve a company problem; you can make a definite contribution to specific company goals. <br /><br />    <b>4. What would you do for us? What can you do for us that someone else can't? </b><br /> <br />    Relate past experiences that show you've had success in solving previous employer problem(s) that may be similar to those of the prospective employer. <br /><br />    <b>5. What about the job offered do you find the most attractive? Least attractive? </b><br /><br />    List three or more attractive factors and only one minor unattractive factor. <br /><br />    <b>6. Why should we hire you?</b><br /> <br />    Because of your knowledge, experience, abilities and skills. <br /><br />    <b>7. What do you look for in a job? </b><br /> <br />    An opportunity to use your skills, to perform and be recognized. <br /><br />    <b>8. Please give me your definition of a.... (The position for which you are being interviewed). </b><br /> <br />    Keep it brief -- give an action- and results-oriented definition. <br /><br />    <b>9. How long would it take you to make a meaningful contribution to our firm?</b><br /> <br />    Not long at all -- you expect only a brief period of adjustment to the learning curve. <br /><br />    <b>10. How long would you stay with us?</b><br /> <br />    As long as we both feel I'm contributing, achieving, growing, etc. <img src ="http://www.cppblog.com/Lee/aggbug/73121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-06 16:58 <a href="http://www.cppblog.com/Lee/archive/2009/02/06/73121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>特殊情况下的面试问题应答</title><link>http://www.cppblog.com/Lee/archive/2009/02/06/73119.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Fri, 06 Feb 2009 08:41:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/06/73119.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73119.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/06/73119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73119.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73119.html</trackback:ping><description><![CDATA[有些应聘者会有特殊的情况，比如“频繁跳槽”和“职业空白期”，当这些特殊经历在简历上表现出来后，自然也逃不过面试官的询问。那么这些问题该如何应对？ <br /><br /><b>情况一：频繁跳槽——如果你在5年内换了6份工作</b><br /><br />    <b>面试官的考虑：</b><br />    1．应聘者的从业情况存在不稳定性，如果我录用他，他是否也会在一年甚至半年内跳槽，浪费公司的招聘成本？ <br />    2．应聘者没有明确的职业目标，他对自己的定位不清； <br />    3．其他不确定因素，比如不会处理人际关系或者个人性格自由散漫，这些问题在我的公司也不能得到解决。 <br /><br />    <b>问题分析：</b>“为什么频繁跳槽”这个问题的背后，其实面试官真正想知道的是“你是否还会继续频繁跳槽”，因此“表决心”在这里非常重要。同时，频繁跳槽是一个贬义的表达，在回答时要将它正面化，不论是态度还是答案。 <br /><br />    <b>回答思路：</b><br />    1．诚实地承认过去的经历，即使你在简历上跳过一些公司，背景调查也会让你无所循行； <br />    2．表决心。表示你已经了解频繁跳槽的害处，并为此付出了代价，所以你不会再继续下去； <br />    3．说明频繁跳槽的经历给自己带来的其他收获，比如获得了多种工作经验；确定了职业目标，应聘的职位正与职业目标相符合。 <br /><br /><b>情况二：转行——你做了6年猎头后想转行成为HR</b><br /><br />    <b>面试官的考虑：</b><br />    1．应聘者拥有多少转入行业的工作经验？如果录用他，我需要花费多少成本来培训？ <br />    2．应聘者是否具有在本行业发展的潜力？他的才能对于企业的贡献将会是多大？ <br />    3．应聘者是否愿意和新人一样从零做起？是否可以接受比以前低的薪水？ <br /><br />    <b>问题分析：</b>任何招聘行为都是为了找到适合的人才，面试官问你“为什么想到要做HR”，其实他真正关心的并不是原因，而是你“适合不适合”，所以你的答案应该围绕着“我为什么适合转行做HR”而展开。同时，面试官对你的职业定位和发展方向仍有疑虑，他同时也在问：“你确定这个行业是你真正想要进入的吗？”在回答时要注意，不要露出个人稳定性不足的缺陷。 <br /><br />    <b>回答思路：</b><br />    1．虽然你应该表示愿意和新人一起起跑，但不能过多强调这一点。如果给面试官留下“你=新人”这样的印象，因为成本关系，你必然是被淘汰的那个； <br />    2．应该说明你过去的工作经验对于转行后的新职位仍有帮助，你看似从零开始，实际上却有各种软性技能作为铺垫，帮助你迅速提高； <br />    3．陈述你应聘这个职位的优势。比如你在猎头行业工作多年，有相当多的人脉关系，对HR行业也非常了解等。 <br /><br /><b>情况三：职业空白期——如果你有三年职业空白期</b><br /><br />    <b>面试官的考虑：</b><br />    1．这段空白期对应聘者的业务技能造成多少影响？他是否可以很快进入工作状态？ <br />    2．当前职位对于空白时间长短的最大容忍度是多少？他是否适合这个职位？ <br />    3．这段空白是否会影响应聘者对于职业目标的确认？他是否能够在这个岗位上保持稳定性？ <br /><br />    <b>问题分析：</b>如果简历上有空白期，那一定逃不过面试官的询问，不过面试官关心的并不是你在这三年里干了什么，而是经过这段空白期，你是否还能适应当前的工作。这个问题较多出现在生育后花费相当长时间照顾孩子的女性身上，面试官担心的是你是否能解决孩子与工作的矛盾，你所要做的就是解除面试官的疑惑，让他对你产生信心。不需要过多解释为什么会有空白期，也不必过多陈述空白期时自己干了些什么，除非这对你当前应聘的职位有益。 <br /><br />    <b>回答思路：</b><br />    1．确认自己的优势，这些优势正好满足当前应聘的岗位。比如在空白期里你参加了一次与应聘职位有关的培训； <br />    2．明确自己已经有了思想准备和具体方法措施。比如这三年时间你在照顾孩子，那么你应该有孩子和工作的平衡方案； <br />    3．从另一方面说明，这段职业空白对你相当宝贵，你利用这段时间对自己的职业和人生进行思考，你能够对自己更负责，也能够做出更为成熟的决定。<br /><img src ="http://www.cppblog.com/Lee/aggbug/73119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-06 16:41 <a href="http://www.cppblog.com/Lee/archive/2009/02/06/73119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试常规问题应答</title><link>http://www.cppblog.com/Lee/archive/2009/02/06/73116.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Fri, 06 Feb 2009 08:31:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/06/73116.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73116.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/06/73116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73116.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73116.html</trackback:ping><description><![CDATA[通常企业会从专业能力和职业素质的角度来考察应聘者，虽然说专业能力会因为招聘岗位的不同而有所区别，但除去非常具体的专业题目，面试官在面试时提出的问题和询问的技巧在很大程度上是共通的。应聘者需要做的是针对这些常规问题进行准备，而且必须保证应答时不会像背书一样僵硬。 <br /><br /><b>问题一：你的缺点是什么？</b><br /><br />    <b>问题分析：</b>你真正的缺点是什么并不重要，面试者希望了解的是求职者是否对自己有一个正确的评价，对自己是否有足够的了解，心理是否足够成熟，以及是否有继续学习改进的愿望。当然，通常面试官不会把问题问得那么直接，而是通过让面试者举出具体事例的方式来回答，求职者难以临场编造一个具体的例子，因而答案更具真实性。但如果你诚实地交代了“我因为过于内向而放弃了销售机会”的故事，那同样等于你放弃了这个新的工作机会。 <br /><br />    <b>回答思路：</b>这个问题根据面试者的不同，面试官也会对答案有不同的心理预期。比如说一个应届毕业生，就可以直接回答：“我相信我有足够的理论知识和专业能力，但是我的工作和社会经验不足，人脉也有所欠缺……”这样答案符合面试官对毕业生身份的定位，也符合实际情况，面试官便会觉得你谦虚诚实；而如果一个女性应聘管理岗位，则可以回答：“我最大的缺点可能就是不像女人，不够温柔……”总之，一切回答取决于你的实际状况和你对自己的定位。 <br /><br /><b>问题二：你和上司因为工作有过分歧吗？最后的结果是？</b><br /><br />    <b>问题分析：</b>“企业潜规则”是一个流行词，其中重要的一部分就是“等级制度”，企业是一座等级森严的堡垒，如果你还没有意识到其中的残酷性，这个问题恐怕就会让你栽跟头，如果你的回答表现出对上司权力的挑衅，那么对不起，哪座庙都装不下你这尊大佛。其实这个问题并不难，你只要明白，上司是承担责任的那一个，所以他才是下决定的那一个。不要表现得好像青春期反抗父母权威的叛逆小孩，这并不能体现你的个性，只是让别人知道你还不成熟。 <br /><br />    <b>回答思路：</b>必须遵从的原则： <br />    1.表示一定会选择适当的时机与上司沟通，其中“适当的时机”非常重要； <br />    2.表示通常情况下最终一定服从上司的决定，但不要使用“你是上司你说了算”这种表达方式。 <br />    3.不要打“越级报告”的主意，这在任何企业都是禁忌。 <br /><br /><b>问题三：是否有过失败的经历？</b><br /><br />    <b>问题分析：</b>既然提问的是“失败经历”，说明面试官在意的并不是这个结果，他想了解的是事情的过程、你处理工作的方法以及你的学习能力。通常“你工作中最难忘的一件事”“你在工作中遇到的最大困难”都可以等同于这个问题。在回答上，答案的具体事例也可以体现应聘者的专业程度，比如提到的困难是不是应聘岗位所不可避免的，所涉及的方法和使用的公司资源又是否恰当，这是一个非常专业的问题。 <br /><br />    <b>回答思路：</b>回答的重点应该在“经历”，而非“失败”上，面试官并不想了解你对失败的态度——任何人都知道此时应该保持积极。回答时应该具体说明的内容有： <br />    1.当时的背景和能够使用的资源； <br />    2.你处理事情的方法； <br />    3.失败后的总结和反思。细节越详细越可以体现你的专业程度，总结和反思则体现了你的学习能力。有自信有准备的话，可以就失败的经历“重来一次”，提出新的解决方案。 <br /><br /><b>问题四：你的期望薪资是多少？</b><br /><br />    <b>问题分析：</b>恭喜，如果被询问这个问题，说明你被录用的可能很大。在回答之前应该明白的是，其实每一个公司都有自己的薪酬体系，如果不是空降BOSS或者特别顾问，你不可能就薪酬问题有太多讨价还价的余地。这个问题背后没有隐含的意义，只要你对自己和本岗位估价正确即可。 <br /><br />    <b>回答思路：</b>不能狮子大开口，想要获得比较公平的薪酬，有两种方法：一，在面试前进行市场调查，了解一下本行业本岗位的平均薪酬水平；二，如果这个数字比较难获得，那么可以以之前的工作收入为基准，适当地进行提升。需要注意的是，不要在没有依据铺垫的前提下直接说“我想要月薪多少”，也不要主动询问薪酬。<br /><img src ="http://www.cppblog.com/Lee/aggbug/73116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-06 16:31 <a href="http://www.cppblog.com/Lee/archive/2009/02/06/73116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试的常见问题回答方法之我见</title><link>http://www.cppblog.com/Lee/archive/2009/02/06/73115.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Fri, 06 Feb 2009 08:24:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/06/73115.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73115.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/06/73115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73115.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73115.html</trackback:ping><description><![CDATA[    1．你是否考虑过个人创业。如果希望个人创业，你准备什么时候创业？ <br />    <b>提示：</b>既然面试，说明你选择打工，所以避免提及创业。因为打工和当老板差异太大，过多地在面试中表达想创业的想法会使面试官不舒服；很多公司还会害怕有朝一日你在他这带走客户资源、技术秘密。 <br /><br />    <b>推荐答案：</b>我目前不考虑创业；我的目标是安心工作，在这个行业、在这个岗位上有所作为。 <br /><br />    2．你希望自己五年（十年）之后是怎样的？ <br />    <b>提示：</b>千万别说自己没有规划、没想过；说这个显得你毫无职业规划，给人造成很差的印象。 <br /><br />    <b>推荐答案：</b>我很喜欢 XX 行业，我希望在这行业、在贵公司有所作为，成为企业的中层管理人员；成为这个行业小有业绩的人才。 <br /><br />    3．你觉得从工作的角度分析自己，你自己最大的优点和缺点是什么？ <br />    <b>提示：</b>根据应聘的职务可以发挥。 <br /><br />    <b>推荐答案：</b>比如做事情认真负责有始有终，肯吃苦肯付出，说这些肯定没错。还有一些与岗位要求贴切的优点，如技术人员说学习能力强、业务人员说自己表达能力强、财会人员说自己稳重、踏实…… <br /><br />    至于缺点，千万别说自己没有，或没想过。因为人无完人，你说自己没缺点那肯定是没有认识到自己的不足，这样的人没有公司喜欢；说缺点也要注意，有个原则，就是说一些无关紧要的缺点，对新工作没有影响的缺点。千万注意不要搬石头砸自己的脚。 <br />   <br />    4．你觉得自己那方面能力最急需提高？ <br />    <b>提示：</b>不要说技术水平、知识水平、经验等等，说这些太肤浅，人人都得提高；说白了，这些都是废话。 <br /><br />    <b>推荐答案：</b>强调一些客观的内容，具备高度性、前瞻性的东西，如全行业的一些知识等等。 <br /><br />    5．你希望你的上司是什么样的人？ <br />    <b>提示：</b>这个问题的原则是对上司不要提过多的要求，因为是他领导你，谦虚一点总归没有错。你千万不要认为问你这个问题是真的让你去选择你的上司。 <br /><br />    <b>推荐答案：</b>我希望我的上司能够平时工作上多多指导、栽培我，能够给我更大发挥的空间。 <br /><br />    6．你为什么离开了上一个工作岗位？ <br />    <b>提示：</b>这个问题很棘手，原则是绝对不要说原来公司的坏话或同事的坏话，这只会显得你心胸狭窄，让人感觉你有过河拆桥的想法，会引起面试管不悦。 <br /><br />    <b>推荐答案：</b>可以强调一些无关紧要的客观原因，如原来的公司搬迁啊，自己搬家啊，公司岗位调整等等原因。说原因的时候要注意这个原因在新的工作绝对不能存在，否则会适得其反。 <br /><br />    7．你希望两年以后你在公司是什么样子？ <br />    <b>提示：</b>因为你对将来的工作环境、周围的人也不是很了解，所以回答这个问题切忌不要多说废话，言简意赅；说多了遇到面试官不爱听的容易搞砸。 <br /><br />    <b>推荐答案：</b>希望能在岗位做出一番成绩，得到领导的认可和赏识。通过自己的努力能够在公司得到提升……这么说一般都不会有什么问题。 <br />   <br />    8．请你讲一件你在以前的工作中印象最深/有成就感的事情。 <br />    <b>回答要点：</b>是要努力向面试官证明自己讲述故事的真实性，故事需要突出自己如何工作努力，专心，得到公司和同事的肯定之类的经历。 原则上必须是积极工作的故事。 <br /><br />    9．你觉得在你以前的工作中（包括兼职工作）有什么体会、收获？ <br />    <b>提示：</b>千万别说体会到了工作的辛苦、钱不好赚之类的话，这些都是废话，面试的过程不是抱怨、诉苦、谈心，所以不能想当然地回答。 <br /><br />    <b>推荐答案：</b>强调自己以前工作中实在的收获，包括技术方面、做人方面等的收获。从侧面说明自己的工作业绩是比较好的，人际关系也处得不错；领导比较欣赏你。 <br /> <br />    10．你觉得什么样的工作最适合你？ <br />    <b>提示：</b>回答与面试应聘相关的工作，其他与面试无关的工作不要提及。 <br /><br />    11．你觉得什么样的工作最不适合你？ <br />    <b>提示：</b>这个可以事实求是地回答，但注意这个工作内容不要涉及到你所面试公司的相关工作内容。 <br /><br />    12．你来我们公司最希望得到什么？ <br />    <b>提示：</b>千万不要回答来公司学习、锻炼、提高——这类话是应届生经常喜欢说的，有很多人喜欢把公司当成培训学校，这种想法很幼稚。这些话学校里的老师也许爱听，你的亲戚朋友爱听，但面试你的人未必爱听。我要提醒大家，公司不是为了培训人而存在的，而是为了经济效益存在的。 <br /><br />    <b>推荐答案：</b>我最希望能尽快胜任岗位，得到领导的认可和赏识。将来能够得到重用、提升。在公司工作，一切的核心是工作业绩和业务能力，所以必须要抓住这两点。 <br /><br />    <b>回答面试提问的基本原则：</b>回答一切问题都要围绕着你所应聘的工作展开，无关紧要的废话越少越好！因为废话不仅不能给你带来任何好处，反而某句话不当会引起面试官的反感，因为你不了解面试官，既然不了解所以必须要保守一些。围绕着你所应聘的工作展开话题就能确保一般情况你不会被过早淘汰，从而提高你的面试成功率！ <img src ="http://www.cppblog.com/Lee/aggbug/73115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-06 16:24 <a href="http://www.cppblog.com/Lee/archive/2009/02/06/73115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试问题大通关</title><link>http://www.cppblog.com/Lee/archive/2009/02/06/73114.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Fri, 06 Feb 2009 08:20:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/06/73114.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73114.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/06/73114.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73114.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73114.html</trackback:ping><description><![CDATA[
		<h1 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: 700; FONT-SIZE: 16px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 30px; PADDING-TOP: 0px">
				<span class="title">   <b>问题一：“请你自我介绍一下”</b><br /><br />    常规思路： ①介绍内容要与个人简历相一致； ②表述方式上尽量口语化；③要切中要害，不谈无关、无用的内容；④条理要清晰，层次要分明；⑤事先最好以文字的形式写好背熟。 <br /><br />　　点评：我个人在面试中一般喜欢用这个作开场白，这个问题其实已经心里有数，只是作开场白而已，然后对阅读简历中发现的问题，在开场白的时候找机会了解。在回答这个问题的时候一定要想好细节，考官在这个时候一般都会追问几个细节。一般编造的简历和经历在这个过程中都会“穿帮”。 <br />　　 <br />　　<b>问题二：“谈谈你的家庭情况”</b><br /><br />　　常规思路：①对于了解应聘者的性格、观念、心态等有一定的作用，这是招聘公司提问的主要原因；②简单地罗列家庭人口；③宜强调温馨和睦的家庭氛围；④宜强调父母对自己教育的重视；⑤宜强调各位家庭成员的良好状况；⑥宜强调家庭成员对自己工作的支持；⑦宜强调自己对家庭的责任感。 <br />　　 <br />　　点评：这个问题一般很少问，因为毕竟牵涉到个人隐私。国企和部分民营喜欢问，主要是了解社会关系。而不是上述的回答。 <br />　　 <br />　　<b>问题三：“你有什么业余爱好？” </b><br /><br />　　常规思路：①业余爱好能在一定程度上反映应聘者的性格、观念、心态，这是招聘单位提问的主要原因；②最好不要说自己没有业余爱好；③不要说自己有那些庸俗的、令人感觉不好的爱好；④最好不要说自己仅限于读书、听音乐、上网，否则可能令面试官怀疑应聘者性格孤僻；⑤最好能有一些户外的业余爱好来“点缀”你的形象。 <br />　　 <br />　　点评：这个问题一般也问的不多，在面试大学生时提问的概率高些。如果在面试有工作经验人士的时候，主要目的是为了消除紧张感，使对方放松，这个问题本身没有什么特别意义。 <br />　　 <br />　　<b>问题四：“你最崇拜谁？” </b><br /><br />　　常规思路：①最崇拜的人能在一定程度上反映应聘者的性格、观念、心态，这是面试官的主要目的；②不宜说自己谁都不崇拜；③不宜说崇拜自己；④不宜说崇拜一个虚幻的、或是不知名的人；⑤不宜说崇拜一个明显具有负面形象的人；⑥所崇拜的人最好与自己所应聘的工作能“搭”上关系；⑦最好说出自己所崇拜的人的哪些品质、哪些思想感染着自己、鼓舞着自己。 <br />　　 <br />　　点评：这个也最多使面试应届生时候的问题，对经验人士从来不用，否则会显得考官比较傻。 <br />　　 <br />　　<b>问题五：“你的座右铭是什么？” </b><br /><br />    常规思路：①座右铭能在一定程度上反映应聘者的性格、观念、心态，这是面试官问这个问题的主要原因；②不宜说那些医引起不好联想的座右铭；③不宜说那些太抽象的座右铭；④不宜说太长的座右铭；⑤座右铭最好能反映出自己某种优秀品质；⑥参考答案——“只为成功找方法，不为失败找借口”。 <br />　　 <br />　　点评：此问题回答同上。 <br />　　 <br />　　<b>问题六：“谈谈你的缺点” </b><br /><br />　　常规思路：①不宜说自己没缺点；②不宜把那些明显的优点说成缺点；③不宜说出严重影响所应聘职位的缺点；④不宜说出令人不放心、不舒服的缺点；⑤可以说出一些对于所应聘职位“无关紧要”的缺点，甚至是一些表面上看似“缺点”，从工作的角度看却是优点的“缺点”。 <br />　　 <br />　　点评：这个问题上是各种教人面试技巧中，最“害人”的。考官问这个问题，是想测试一个人的成熟度、对自己的判断、和学习改进能力。说出自己有什么缺点，其实一点都不重要。这里重点测评的是面试者是不是真正的对自己有一个正确的评价，而且一般在问这类问题的时候，我喜欢让面试者举出一两件具体事例，这样更具有真实性。尤其是用上面的思路5来回答，纯粹是把面试官当成XXX，难道他们听不出来吗？，如果这样回答，应聘者在面试官心中一定减分不少。 <br />　　 <br />　　<b>问题七：“谈一谈你的一次失败经历” </b><br /><br />    常规思路：①不宜说自己没有失败的经历；②不宜把那些明显的成功说成是失败；③不宜说出严重影响所应聘职位的失败经历；④所谈经历的结果应是失败的；⑤宜说明失败之前自己曾信心百倍、尽心尽力；⑥说明仅仅是由于外在客观原因导致失败；⑦失败后自己很快振作起来，以更加饱满的热情面对以后的工作。 <br />　　 <br />　　点评：上面所谓的经典思路，在这个问题上又一次误判的考官的目的。考官在问这个问题的时候，他的目的仅仅是想知道你做事的手法，而并不是想知道你失败的事情。这个问题会经常变为你成功的经历、工作中最难忘的一件事等等。考官一般在这个时候会重点了解3个方面，当时的背景和资源、应聘者处理事情的手法、应聘者当时反思的结果。通过这三点了解一个人的做事手法和学习能力。上面的所谓思路，纠集于解释失败上面，纯粹是中了考官的圈套。 <br />　　 <br />　　<b>问题八：“你为什么选择我们公司？” </b><br /><br />　　常规思路： ①面试官试图从中了解你求职的动机、愿望以及对此项工作的态度；②建议从行业、企业和岗位这三个角度来回答；③参考答案——“我十分看好贵公司所在的行业，我认为贵公司十分重视人才，而且这项工作很适合我，相信自己一定能做好。” <br /><br />　　点评：我很少问这个问题，如果有人问此问题按照思路中作答尚可。 <br />　　 <br />　　<b>问题九：“对这项工作，你有哪些可预见的困难？” </b><br /><br />　　常规思路：①不宜直接说出具体的困难，否则可能令对方怀疑应聘者不行；②可以尝试迂回战术，说出应聘者对困难所持有的态度——“工作中出现一些困难是正常的，也是难免的，但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备，任何困难都是可以克服。” <br /><br />　　点评：一般问这个问题，面试者的希望就比较大了，因为已经在谈工作细节。但常规思路中的回答，又被面试官“骗”了。当面试官询问这个问题的时候，有两个目的。第一，看看应聘者是不是在行，说出的困难是不是在这个职位中一般都不可避免的问题。第二，是想看一下应聘者解决困难的手法对不对，及公司能否提供这样的资源。而不是想了解应聘者对困难的态度。 <br /><br />    <b>问题十：“如果我录用你，你将怎样开展工作？” </b><br /><br />　　常规思路： ①如果应聘者对于应聘的职位缺乏足够的了解，最好不要直接说出自己开展工作的具体办法；②可以尝试采用迂回战术来回答，如“首先听取领导的指示和要求，然后就有关情况进行了解和熟悉，接下来制定一份近期的工作计划并报领导批准，最后根据计划开展工作。” <br />　　 <br />　　点评：这个问题的主要目的也是了解应聘者的工作能力和计划性、条理性，而且重点想要知道细节。如果向思路中所讲的迂回战术，面试官会认为回避问题，如果引导了几次仍然是回避的话。此人绝对不会录用了。 <br />　　 <br />　　<b>问题十一：“与上级意见不一致，你将怎么办？”</b><br /><br />　　常规思路：①一般可以这样回答“我会给上级以必要的解释和提醒，在这种情况下，我会服从上级的意见。”②如果面试你的是总经理，而你所应聘的职位另有一位经理，且这位经理当时不在场，可以这样回答：“对于非原则性问题，我会服从上级的意见，对于涉及公司利益的重大问题，我希望能向更高层领导反映。” <br /><br />　　点评：这个问题的标准答案是思路1，如果用2的回答，必死无疑。你没有摸清楚改公司的内部情况，先想打小报告，这样的人没有人敢要。 <br />　　 <br />　　<b>问题十二：“我们为什么要录用你？” </b><br /><br />　　常规思路：①应聘者最好站在招聘公司的角度来回答；②招聘公司一般会录用这样的应聘者：基本符合条件、对这份工作感兴趣、有足够的信心；③如“我符合贵公司的招聘条件，凭我目前掌握的技能、高度的责任感和良好的适应能力及学习能力 ，完全能胜任这份工作。我十分希望能为贵公司服务，如果贵公司给我这个机会，我一定能成为贵公司的栋梁！” <br /><br />　　点评：按思路中的回答还可以。 <br />　　 <br />　　<b>问题十三：“你是应届毕业生，缺乏经验，如何能胜任这项工作？” </b><br /><br />　　常规思路：①如果招聘单位对应届毕业生的应聘者提出这个问题，说明招聘公司并不真正在乎“经验”，关键看应聘者怎样回答；②对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业；③如“作为应届毕业生，在工作经验方面的确会有所欠缺，因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现，实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力，而且比较勤奋，所以在兼职中均能圆满完成各项工作，从中获取的经验也令我受益非浅。请贵公司放心，学校所学及兼职的工作经验使我一定能胜任这个职位。” <br /><br />　　点评：这个问题思路中的答案尚可。突出自己的吃苦能力和适应性以及学习能力（不是学习成绩）为好。 <br />　　 <br />　　<b>问题十四：“你希望与什么样的上级共事？” </b><br /><br />　　常规思路：①通过应聘者对上级的“希望”可以判断出应聘者对自我要求的意识，这既上一个陷阱，又是一次机会；②最好回避对上级具体的希望，多谈对自己的要求；③如“做为刚步入社会的新人，我应该多要求自己尽快熟悉环境、适应环境，而不应该对环境提出什么要求，只要能发挥我的专长就可以了 <br />　　 <br />　　点评：这个问题比较好的回答是，希望我的上级能够在工作中对我多指导，对我工作中的错误能够立即指出。总之，从上级指导这个方面谈，不会有大的纰漏。 <br />　　 <br />　　<b>问题十五：“您在前一家公司的离职原因是什么？” </b><br /><br />　　常规思路：①最重要的是：应聘者要使找招聘单位相信，应聘者在过往的单位的“离职原因”在此家招聘单位里不存在；②避免把“离职原因”说得太详细、太具体；③不能掺杂主观的负面感受，如“太辛苦”、“人际关系复杂”、“管理太混乱”、“公司不重视人才”、“公司排斥我们某某的员工”等；④但也不能躲闪、回避，如“想换换环境”、“个人原因”等；⑤不能涉及自己负面的人格特征，如不诚实、懒惰、缺乏责任感、不随和等；⑥尽量使解释的理由为应聘者个人形象添彩；⑦相关例子：如“我离职是因为这家公司倒闭；我在公司工作了三年多，有较深的感情；从去年始，由于市场形势突变，公司的局面急转直下；到眼下这一步我觉得很遗憾，但还要面对显示，重新寻找能发挥我能力的舞台。”同一个面试问题并非只有一个答案，而同一个答案并不是在任何面试场合都有效，关键在应聘者掌握了规律后，对面试的具体情况进行把握，有意识地揣摩面试官提出问题的心理背景，然后投其所好。 <br />　　 <br />　　点评：除非是薪资太低，或者是最初的工作，否则不要用薪资作为理由。“求发展”也被考官听得太多，离职理由要根据每个人的真实离职理由来设计，但是在回答时一定要表现得真诚。实在想不出来的时候，家在外地可以说是因为家中有事，须请假几个月，公司又不可能准假，所以辞职。这个答案一般面试官还能接受。（完）</span>
		</h1>
<img src ="http://www.cppblog.com/Lee/aggbug/73114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-06 16:20 <a href="http://www.cppblog.com/Lee/archive/2009/02/06/73114.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>魔鬼词典</title><link>http://www.cppblog.com/Lee/archive/2009/02/06/73112.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Fri, 06 Feb 2009 07:57:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/06/73112.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73112.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/06/73112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73112.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73112.html</trackback:ping><description><![CDATA[
		<p>残忍啊，美丽姑娘竟然被火柴烧死的惊天血案  <br />　　《卖火柴的小女孩》而已。。 　 <br />　　 1.白雪公主＝苦命的妹子啊，七个义薄云天的哥哥为你撑起小小的一片天 <br />　　　　2.小红帽＝善良的女孩呵，你怎知好心指路采花的哥哥竟是黑心狼 <br />　　　　3.海的女儿＝ 痴心的少女，你甘为泡沫为何番？？？ <br />　　　　4.灰姑娘 ＝恶毒后母狠心虐待难挡痴情王子撑起一片情天 <br />　　　　6.蓝胡子 ＝新婚一个月，我发现丈夫是个杀人犯！ <br />　　　　7.西游记 ＝浪子回头，善良的师父指引我重返西天求学之路 <br />　　　　8.美女与野兽 ＝爱慕虚荣的悔恨，心上人娶了我妹妹 <br />　　　　9.哈利波特 ＝毁容少年自强自立：我爱上这一道疤痕！ <br />　　　　10.睡美人 ＝一根纺针引发悲剧，痴情哥哥披荆斩棘唤醒妹 <br />　　　　11.变形金刚 ＝威震天坠落地球冰冻数百年，柱子哥千里缉凶终把仇人灭 <br />　　　　12.邋遢大王＝ 不修边幅放荡少年路遇巧言鼠，斗志斗勇地洞奇遇终成绅士男 <br />　　　　13.蜡笔小新 ＝早熟正太一只大象闯天下，美女姐姐见之绝倒为哪般 <br />　　　　14.圣斗士 ＝ 重回古希腊斗兽岁月，花季少年集体大逃杀；效忠雅典娜至死不渝，小强星失永远最闪亮 <br />　　　　15.机器猫 ＝只愿此生不再让你哭泣，让我穿越时空来拯救你 <br />　　　　16.嫦娥奔月 ＝铸成大错的逃亡爱妻啊，射击冠军丈夫等你悔悟归来 <br />　　　　17.牛郎织女 ＝苦命村娃高干女——一段被狠心岳母拆散的惊世恋情 <br />　　　　18.唐伯虎点秋香 ＝我那爱人打工妹哟，博士后为你隐姓埋名化身农民工 <br />　　　　19.秦香莲 ＝ 三载漫漫上访路，结发妻终将重婚丈夫拉下马 <br />　　　　20.皇帝的新衣 ＝胖子裸逛闹市街头，无邪稚童一语捅破 <br />　　　　21.皇帝的新衣 ＝国家元首，真空上阵挑战性感底线为哪般 <br />　　　　22.孟姜女哭长城 ＝贫贱女怒斥攀比盖楼风，为农民工丈夫讨回尊严 <br />　　　　23.三国演义 ＝从贫贱到自强，三兄弟的旷世畸恋 <br />　　　　24.犬夜叉 ＝.救猫失足坠落深井的女孩哟！忠诚狗狗为你撑起生命轮回的蓝天！ <br />　　　　25.黑猫警长 ＝海水与火焰的煎熬，我与他纠缠了半辈子的黑白孽缘 <br />　　　　26.狮子王 ＝流走异乡的王子，用他愤怒的爪牙扑向杀父的仇人吼出河蟹社会法制之音！！ <br />　　　　27.封神演义 ＝为前妻登上神仙宝座，八旬教授不畏牛鬼蛇神 <br />　　　　28.大头儿子小头爸爸 ＝畸形两父子诠释人间真爱 <br />　　　　29.丑小鸭 ＝貌丑心善受尽难言屈辱，命苦弃儿终成杰出青年 <br />　　　　30.蓝精灵 ＝蓝天给了他们蓝色的皮肤，白云给了他们洁白的心灵---一个与世隔绝的蓝色皮肤村探秘 <br />　　　　31.葫芦娃 ＝七幼童嗷嗷待哺，无私养父啊，贩婴恶夫妇为夺婴竟向你亮起屠刀！！ <br />　　　　32.大力水手 ＝小小菠菜铸就了他的壮烈人生哟，小块头也有大智慧 <br />　　 <br />　　 <br />　　　　《红楼梦》改为《包办婚姻，一场家破人亡的人间惨剧》 <br />　　　　《泰坦尼克号》改为《冰冷的大西洋！带走我的爱人！一个富婆与穷画家的旷世畸恋》 <br />　　　　《白蛇传》改为《我那文弱的书生哥哥啊，你可知痴心妹妹已为你等候千年》 <br />　　　　《舒克与贝塔》＝《过街老鼠发奋做飞行员和坦克手，低贱角色奏出生命最强音》 <br />　　　　《满城尽带黄金甲》 丰胸肥臀放荡继母 痴傻癫狂傻儿子 一场肉欲跟权利引发的乱伦争斗 <br />　　　　《墨攻》 平头肃杀的哥哥哟，无声哀怨地牢等你来拯救 <br />　　　　《亮剑》李云龙——《忠贞的妻哟，这隆隆炮火见证了我们刑场上的婚礼！》 <br />　　　　《武林外传》白展堂——《漂泊多年浪子终回头，你可知痴情老板娘为你一路守望？》 <br />　　　　《梁山伯与祝英台》——《芳魂化蝶——那对被“门当户对”扼杀的殉情恋人啊》 <br />　　　　《杨教授和翁小姐》——《就是要和“爷爷”结婚——忘年恋人用真情大爱冷对无情人世》 <br />　　　　《陈圆圆》——《当尼姑是我渴望的归宿！——从高官情妇到村长二奶的苦命红颜》 <br />　　　　《女娲造人》——《玩泥巴玩出大事业——全球最手工泥塑女皇的发迹之路》 <br />　　　　《上海滩》——《宝贝女儿情迷古惑仔 黑帮老爹无奈起杀心》 <br />　　　　《华仔与娟娟》——《我风华绝代的华仔哥哥啊，你是娟娟心中永远的纠结》 <br />　　　　《克林顿与希拉里》——《风流总统无颜面对拉链门，豪情夫人抑郁难平闹革命》 <br />　　　　《鹿鼎记》——《花心正太的心灵成长史——我和七个老婆不得不说的故事》 <br />　　　　《武大郎与潘金莲》——《欲乱绝情妻——烧饼郎泣血悲号终丧命》 <br />　　　　《陈水扁》——《忍辱负重终登高位，猥琐男翻脸无情》 <br />　　　　《寻秦记》——《古天乐失足时空穿梭机，郭羡妮不畏艰难永相随》 <br />　　　　《新神雕侠侣》——《黄晓明熟男演义，刘亦菲萝莉情深》 <br />　　　　《武松》——《嫂子啊，并非小叔不肯，只是不忍毁弃我多年练就的童子功》 <br />　　　　《武大郎》——《我很丑，可是我很温柔》 <br />　　　　《西门庆》——《男人有钱就变坏，乱搞男女关系富豪酒楼把命丧》 <br />　　　　《红花怒放！谁说中老年妇女不能掳获万千少男心？》——杨二 <br />　　　　《美丽钻戒，见证让大嫂哭泣的爱情故事》——柯以敏 <br />　　　　《豪门逆伦酿苦果——哥哥啊，妹妹只能来生再爱你》——《雷雨》 <br />　　　　《血泪控诉！那在每个深夜虐童到黎明的狠心老板》——《高玉宝》 <br />　　　　《诗经》：《苦命的痴情女啊，用千百篇诗歌也唤不回薄情郎》 <br />　　　　《论语》：《恩重如山的孔爷爷，渴望上学的孩子们不能没有你》 <br />　　　　《中庸》：《告诉你一个真理：人生就是一场游戏一场梦而已》 <br />　　　　《史记》：《一个遭受阉割的男人，你的记录成就宏伟业绩》 <br />　　　　《孙子兵法》：《男人无腿也无悔 用热血书写打赢的奇迹》 <br />　　　　《三国志》：《绝世美女大小乔：我们看到了三个男人帮的血腥恩怨》 <br />　　　　《二十四史》：《纵欲无度的陛下啊，你让你的多少爱人为你心碎》 <br />　　　　《礼记》：《避免职场性骚扰，你的防线不如这些礼节》 <br />　　　　《聊斋志异》：《鲜为人知的人兽恋，感天动地多少年》 <br />　　　　《山海经》：《美丽精灵的哭诉：我是禽兽还是人？》 <br />　　　　《搜神记》：《搜！搜！搜！你所不知道的社会百态录》 <br />　　　　《战国策》：《军事会客厅 会见战争当事人》 <br />　　　　《庄子》：《想要翱翔的你，别忘记逍遥背后的泪》 <br />　　　　《老子》：《老子不一定是孩子他爹——一位“带头大哥”的真心寄语》 <br />　　　　《吕氏春秋》：《我的二奶是太后：留给皇帝私生子的治国宣言》 <br />　　　　《水经注》：《踏遍祖国的锦绣河山后，我就成了著名作家》 <br />　　　　《楚辞》：《离骚的我和发骚的你，无奈这个闷骚的世界》 <br />　　　　一、童话篇 <br />　　　　《白雪公主》——苦命的妹子啊，七个义薄云天的哥哥为你撑起小小的一片天～ <br />　　　　《小红帽》——善良的女孩呵，你怎知好心指路采花的哥哥竟是黑心狼～ <br />　　　　《小红帽》——聪慧儿童严守家门，凶残犯人伪装其母声欲进屋惨被识破 <br />　　　　《海的女儿》——痴心的少女，你甘为泡沫为何番？？？ <br />　　　　《莴苣》——长发的姑娘啊，你可向往着那自由的天空 <br />　　　　《睡美人》——拿什么来唤醒你啊，我的爱人 <br />　　　　《睡美人》——沉睡的少女哎!痴心等待终遇友情郎! <br />　　　　《睡美人》——一根纺针引发悲剧，痴情哥哥披荆斩棘唤醒妹 <br />　　　　《睡美人》——安然入睡的容颜，是百年不变的等待 <br />　　　　《睡美人》——百年不变的守候,只为你那淡定的一吻！ <br />　　　　《豌豆公主》——花季少女体无完肤伤痕累累，谁才是伤害她的真正凶手 <br />　　　　《拇指姑娘》——身残志坚的侏儒小女孩啊，谁为你的未来撑起一片晴空 <br />　　　　《灰姑娘》——恶毒后母狠心虐待难挡痴情王子撑起一片情天 <br />　　　　《青蛙王子》——丢失金球的公主啊，你该如何去拯救那中了诅咒的青蛙王子 <br />　　　　《红舞鞋》——叫无辜女孩情何以堪，为何我怎么都停不下来？ <br />　　　　《红舞鞋》——-诱惑之舞，让纯洁女孩走向难以自制的深渊 <br />　　　　《蓝胡子》——《新婚一个月，我发现丈夫是个杀人犯！》 <br />　　　　《蓝胡子》——无知妻子推开邪恶之门,13位花样少妇天国复仇 <br />　　　　《卖火柴的小女孩》——狠心母亲虐待火柴幻想症少女,祖母不忍勾其魂入天国 <br />　　　　《卖火柴的小女孩》——　残忍啊，美丽姑娘竟然被火柴烧死的惊天血案 <br />　　　　《野天鹅》——甘采荆棘，大义妹子换的七位兄弟重归来 <br />　　　　《木偶匹诺曹》——躯体的异变，一次次的谎言 <br />　　　　《皇帝的新意》——胖子裸逛闹市街头，无邪稚童一语捅破 <br />　　　　《皇帝的新衣》——永不低头，弱冠少年不畏强权勇揭国王裸奔恶行 <br />　　　　《皇帝的新衣》——国家元首，真空上阵挑战性感底线为哪般 <br />　　　　《灰姑娘》——心机女舞会留破鞋，鞋癖男疯狂觅鞋主 <br />　　　　《灰姑娘》——勾男宝典，身份卑微的我是这样勾引到王子的.... <br />　　　　《灰姑娘》—— 一夜情感的倾诉，有情人终归撑起一片天 <br />　　　　《灰姑娘》——那一夜的疯狂，我抢走了姐姐心上的人儿 <br />　　　　《坚定的锡兵》——残少年痴心一片，为舞女赴汤蹈火。 <br />　　　　《丑小鸭》——回首多年辛酸路，我终于站在了美丽之颠 <br />　　　　《丑小鸭》——貌丑心善受尽难言屈辱，命苦弃儿终成杰出青年 <br />　　　　《小意达的花儿》——深夜约会，美丽少女的甜蜜秘密 <br />　　　　《白雪皇后》——苦命富家女哟，发誓为情郎走天涯！ <br />　　　　《大斯特劳斯和小斯特劳斯》——苦命的弟弟呀，在哥哥暴虐摧残后终于守得自己的一片天 <br />　　　　《渔夫和金鱼》——贪心的太太哦，一夜之间从暴富到赤贫的悲惨。 <br />　　　　《渔夫与金鱼》——贪心不足蛇吞象——黑心妇人豪门梦断　 <br />　　　　二、动画篇 <br />　　　　《舒克与贝塔》——过街老鼠发奋做飞行员和坦克手，低贱角色奏出生命最强音！ <br />　　　　《邋遢大王》－－不修边幅放荡少年路遇巧言鼠，斗志斗勇地洞奇遇终成绅士男 <br />　　　　《邋遢大王》——浪子回头金不换,老鼠中也有好人 <br />　　　　《葫芦娃》——7个葫芦各怀鬼胎,用自己的本事打出一片天空 <br />　　　　《葫芦娃》——六哥哥力挽狂澜拯救误入歧途小弟,恶毒的夫妇你们终将得到报应! <br />　　　　《葫芦娃》-——七兄弟团结斗蛇妖,众志成城,正义少年终将歹人灭 <br />　　　　《葫芦娃》——七幼童嗷嗷待哺，无私养父啊，贩婴恶夫妇为夺婴竟向你亮起屠刀！！ <br />　　　　《小蝌蚪找妈妈》——无声的呼唤啊，千里寻母之路血泪斑斑。 <br />　　　　《美女与野兽》——爱慕虚荣的悔恨，心上人娶了我妹妹 <br />　　　　《变形金刚》——变形归来的汽车呀，千钧一发的地球等待你的出发 <br />　　　　《变形金刚》－－威震天坠落地球冰冻数百年，柱子哥千里缉凶终把仇人灭 <br />　　　　《变形金刚》——擎天柱：我就是根棒槌！！ <br />　　　　《蜡笔小新》－－早熟正太一只大象闯天下，美女姐姐见之绝倒为哪般 <br />　　　　《圣斗士》－－重回古希腊斗兽岁月，花季少年集体大逃杀 <br />　　　　效忠雅典娜至死不渝，小强星失永远最闪亮 <br />　　　　《圣斗士》系列 <br />　　　　星矢——不死的小强啊，你的身躯永远不会倒下！ <br />　　　　紫龙——男人的悲伤逆流成河——战斗刚打响，我的眼睛就失去了光明 <br />　　　　冰河——我那逝去的母亲啊，你的在天之灵要保佑儿子凯旋归来！ <br />　　　　阿瞬（一辉）——面对死亡，我和哥哥（弟弟）紧握双手相视一笑 <br />　　　　《机器猫》－－只愿此生不再让你哭泣，让我穿越时空来拯救你 <br />　　　　《少女战士》——美丽的月亮啊，用娇弱的肩膀为你保卫净土 <br />　　　　《铁臂阿单木》——身残志坚 靠植入钢板的手臂飞出一片天 <br />　　　　小丸子和花轮同学的爱情故事——情比金坚啊！富家子弟与贫家女的旷世奇情 <br />　　　　《犬夜叉》——为了翠玉的爱恨哟！花季少女不惜致命一箭射中男友！ <br />　　　　《猫和老鼠》——天罗地网中屡次逃脱　数年追捕为何黯无结果？ <br />　　　　－－－他们之间不能说出的秘密 <br />　　　　《黑猫警长》——海水与火焰的煎熬，我与他纠缠了半辈子的黑白孽缘 <br />　　　　《死亡笔记》——一部青涩少年由善到恶的心路历程，一场正义与邪恶的顶级较量！ <br />　　　　《海尔兄弟》——一对穷苦的兄弟，一人一条小裤衩，从赤道到北极的发掘智慧之旅！　 <br />　　　　《狮子王》——流走异乡的王子，用他愤怒的爪牙扑向杀父的仇人吼出新时代河蟹法制之音。 <br />　　　　《哪吒闹海》——《惨绝人寰的父亲哟！目睹亲生幼子剜肉挖心竟无动于衷是为何番？》 <br />　　　　《无情的大海哟，不要吞噬那正义的身影。——幼齿英雄魂归莲花池！》 <br />　　　　《乱马1/2》——反复变性为哪般？花季少男的心酸情史—— <br />　　　　《七龙珠》——穿越时空只为拯救地球，一个有白求恩精神的外星人 <br />　　　　《阿拉蕾》——勤能补拙，谁说智商决定一切？世代弱智村落惊现机器人 <br />　　　　误入雨林的腹黑少女啊，我该拿什么填饱你那无底洞似的胃。。。。热带雨林的爆笑生活。。。阿布啊、、、 <br />　　　　《一休》——一边是青梅竹马，一边是花季艳女，小和尚情归哪方？　 <br />　　　　《希瑞》——难道是她？正义女侠的身份始终成迷—— <br />　　　　《大头儿子小头爸爸》——畸形两父子诠释人间真爱 <br />　　　　《浪客剑心》——一个脸上带疤的孩子，举起你那刀刃在内的剑变成男人吧！　 <br />　　　　《蓝精灵》——蓝天给了他们蓝色的皮肤，白云给了他们洁白的心灵---一个与世隔绝的蓝色皮肤村探秘 <br />　　　　《人猿泰山》——密林追踪，一个生活在热带雨林的“野人”传奇一生 <br />　　　　《大力水手》——小小菠菜铸就了他的壮烈人生哟，小块头也有大智慧！ <br />　　　　《名侦探柯南》——青年惨遭毒手变身侏儒，女友忠贞不弃仍与同居　 <br />　　　　《北斗神拳》——坚强似铁的男人呀，是谁在你的胸口点上无法抹去的伤痕 <br />　　　　三、文学篇 <br />　　　　《西游记》——《浪子回头，善良的师父指引我重返西天求学之路》 <br />　　　　《西游记》——:我那狠心的人啊,不要红颜美眷,偏要伴三丑男上西天 <br />　　　　《红楼梦》——包办婚姻，一场家破人亡的人间惨剧 <br />　　　　《三国演义》——从贫贱到自强，三兄弟的旷世畸恋。 <br />　　　　《红楼梦》——豪门浪荡子啊，却为真爱遁入空门 <br />　　　　《聊斋》——那美轮美奂的梦中仙子呦，怎不叫人牵肠挂肚 <br />　　　　《封神演义》——为前妻登上神仙宝座，八旬教授不畏牛鬼蛇神 <br />　　　　《简爱》——贫寒女教师真情感天动地，用双手为情哥哥撑出一片天 <br />　　　　《呼啸山庄》——生生世世的纠缠爱恋——我和我表兄那不得不说的故事 <br />　　　　《飘》——浪荡女回头是岸，再回首爱人杳然 <br />　　　　《飘》——失去才知道珍贵，拿什么拯救我失败的婚姻 <br />　　　　《官场现形记》——宦海沉浮　利欲熏心——当代贪官回忆录——那些黑镜头 <br />　　　　《啼笑因缘》——相同的面貌　不同的命运——两个女人和一个男人间不得不说的故事 <br />　　　　《青铜葵花》——丧失父亲的女孩呀，哑巴哥哥为你撑起生命蓝天！ <br />　　　　四、电影篇 <br />　　　　《哈利波特》——毁容少年自强自立：我爱上这一道疤痕！ <br />　　　　《加勒比海盗》——孤胆船长哟，茫茫大海不该是你的归宿，收起帆抛下锚随我走天涯 <br />　　　　《怪物史莱客》——我要与你在一起，美少女变身青蛙痴守爱人 <br />　　　　《金刚》——心爱的人啊!!让我为你在最高的楼上打飞机!!!! <br />　　　　《金刚》——金发女与黑大个那禁断的人兽恋　 <br />　　　　《泰坦尼克号》——冰冷的大西洋！带走我的爱人！一个富婆与穷画家的旷世畸恋 <br />　　　　《泰坦尼克号》——深埋海底的蓝色巨钻：奶奶的深埋心底不得不说之旷世奇恋 <br />　　　　《功夫熊猫》—— 发奋图强的黑白少年哟，江湖上总会有你的一席之地！ <br />　　　　五、传说篇 <br />　　　　《嫦娥奔月》——铸成大错的逃亡爱妻啊，射击冠军的丈夫等你悔悟归来 <br />　　　　《牛郎织女》——《苦命村娃高干女——一段被狠心岳母拆散的惊世恋情 <br />　　　　《唐伯虎点秋香》——我那爱人打工妹哟，博士后为你隐姓埋名化身农民工 <br />　　　　《秦香莲》——三载漫漫上访路，结发妻终将重婚丈夫拉下马 <br />　　　　《杨玉环》——公爹变丈夫，一缕香魂散——妖媚贵妇命断情孽纠缠 <br />　　　　《唐明皇与杨贵妃》——悔不当初，儿媳自杀公公含泪为哪般 <br />　　　　《花木兰》——震撼天地——孝顺女为父从军甘当魔鬼女大兵 <br />　　　　《白蛇传》－－我那文弱的书生哥哥啊，你可知痴心妹妹已为你等候千年 <br />　　　　《白蛇传》——妙龄美妇泣血控诉：大师，夺我丈夫，你情何以堪? <br />　　　　《白蛇传》—— 爱他还是爱她？一个已婚男人的痛苦抉择 <br />　　　　《孟姜女哭长城》－－贫贱女怒斥攀比盖楼风，为农民工丈夫讨回尊严 <br />　　　　《梁祝》——伊人化蝶双飞去，此地空余马文才 <br />　　　　《三个和尚没水吃》——天灾还是人祸，断背寺众僧大旱之年竟起内乱 <br />　　　　《凤求凰》——老丈人棒打苦命鸳鸯，有情人夜行私奔 <br />　　　　《武松打虎》——国家一级保护动物缘何命丧公安局长之手?? <br />　　　　《孔雀东南飞》——逼儿离婚终酿人间惨剧，苦命鸳鸯为情踏上不归路 <br />　　　　《女娲造人》——儿子长相不似，DNA验证怎能挽回母亲的含辛茹苦 <br />　　　　《齐姜》——-孽海情天，我与哥哥的一段情 <br />　　　　《武则天》--道德沦陷，一个女子奋斗的情欲挣扎史 <br />　　　　《玄武门之变》---手足相残，老父含泪讲述失败教育的恶果 <br />　　　　《宝莲灯》——娘啊娘，您就是儿的全部，死了也要救你！！ <br />　　　　《金瓶梅》——那英俊健壮的小叔哦，为何至死不肯放过我这薄命女子！ <br />　　　　六、武侠篇 <br />　　　　《诛仙》——张姓男子不爱红颜，爱棍棍为那般！ <br />　　　　《寻秦记》——不畏艰险，今人穿越返古；苍天有眼，终享齐人之福。 <br />　　　　《拳皇》——聚众斗殴还是另有所谋？一个惊世高端群斗集团背后的故事 <br />　　　　《天龙八部》——仨兄弟义薄云天守护祖国大业，仨女子死去活来一心只为爷们 <br />　　　　《倚天屠龙记》—— 不屈不挠无忌沉冤竟昭雪，机关算尽赵敏终画眉 <br />　　　　《神雕侠侣》——师徒绝恋，失贞老师守护纯洁之爱把绝情谷底坐穿 <br />　　　　《神雕侠侣》——断欲的养蜂女和断臂的驯兽师倾情演绎惊世乱伦，纯情LOLI含恨遁入空门 <br />　　　　王重阳自述——阴差阳错啊！我们心高气傲的爱情万人痛惜！》—— <br />　　　　古代女数学家英姑的自传——我孤独的后半生啊！——一位豪门叛逆知识女性的自述 <br />　　　　公孙止自述——丧心病狂！包二奶包出的人间惨剧 <br />　　　　武三通自述——撕心断肠啊！爱上自己女儿是不是一种丧心病狂？ <br />　　　　（沙通天、侯通海、彭连虎、灵智上人）——另人发指啊！惨无人道的全真武校对犯人动用私刑！ <br />　　　　杨过的童年生活——饥寒交迫啊！土窑里失学儿童的无助生活大记实！ <br />　　　　郭镶童年的噩梦——惨绝人寰啊！婴儿盗窃集团背后的故事 <br />　　　　裘千尺与公孙止--　情何以堪，她对变心丈夫举起了屠刀！ <br />　　　　大理段王爷自述—我爱的人，不是我的爱人-南方某省长为爱出家 <br />　　　　天龙八部之段誉篇——富家子身世成谜，揭露豪门情海孽缘 <br />　　　　七、言情篇 <br />　　　　《不能说的秘密》——跨越时空爱上你，琴艺不精终成恨 <br />　　　　《给我一只烟》——命运多舛的娇媚三陪女啊！柔情郎甘愿用一只555香烟换取你一生相伴！ <br />　　　　《上海绝恋》——用什么挽回你的真情，我那暗恋十年的爱人 <br />　　　　《一帘噩梦》——人间惨剧啊，妹夫淫威下大姨子生不如死这是为哪般！ <br />　　　　《水云间》——深情画家咆哮为哪般，与三位女子不得不说的爱恨纠缠- <br />　　　　八、娱乐篇 <br />　　　　《加油好男儿》—— 当红主播陈辰和她背后众多男人不为人知的故事。 <br />　　　　心爱的男人爱上同性，柔软女子这般撕心裂肺的痛何人懂？ <br />　　　　《加油好男儿》——-花季少男同处一室，爱恨情愁谁来定夺 <br />　　　　《快乐男生》——-十三少男被囚城堡受虐，接连消失被遗惨遭毒手 <br />　　　　《红楼梦中人》-------整容失败，谁能还她一个完整的下巴！ <br />　　　　九、人物篇 <br />　　　　范冰冰——:恶毒的谣言啊,你为何总让我小女子遍体鳞伤 <br />　　　　赵薇——天涯何处觅知音,谁能解读成功女人背后那颗酸楚的心 <br />　　　　杨丞琳:—— 一失足呦成千古恨,闪念之间她成为世人唾弃的恶魔 <br />　　　　梁咏琪——“第三者”旧案沉冤昭雪，背负七年的骂名谁来替你偿还？ <br />　　　　张柏芝——仲夏的这声啼哭啊，多事的8月我浴血守望 <br />　　　　芙蓉姐姐——一场车祸改变了她的一生--花样少女身残志坚在人生的舞台上翩翩起舞 <br />　　　　租德GG——黑暗中的搏击者，宫刑之后他怎样啸傲人生 <br />　　　　网络小胖——最是那一次回眸，他用蔑视的眼神控诉这个不平的世界！ <br />　　　　杨二车—— 一朵红花一段情朵朵红花段段情，她用强有力的臂膀虏获住千万少男那腼腆的心。 <br />　　　　妹妹背着洋娃娃——:我那单纯的小妹妹啊,你可知有多少人看你PIAO而嫉妒啊 <br />　　　　《红楼梦》人物 <br />　　　　贾元春——惊天奇案！深宫守卫重重，第一夫人为何光天化日之下神秘暴毙？！ <br />　　　　贾迎春——“不要和陌生人说话！”——军官丈夫竟是人面兽心，美貌女子被困婚姻陷阱！！ <br />　　　　十、时事篇： <br />　　　　《我那狠心的美国爸爸哟，无视23人魂断塔利班》 <br />　　　　《国泰民安,7月18泉城百万人民浴日光庆和谐》 <br />　　　　《23义士以命祭天祈半岛一统，塔利班助手忍痛落泪送行》 <br />　　　　《为08奥运献礼——记塔利班友人一次大义灭亲的反恐行动》 <br />　　　　《聪明的一修》 ——我那深陷佛门的儿啊,叫娘怎生不想念!——豪门二奶心底的呼唤 <br />　　　　《倒霉熊》－－可怜的熊儿啊，你将如何独自面对坎坷的人生 <br />　　　　《蜡笔小新》－－幼儿园也非净土，幼儿早熟谁之错 <br />　　　　四大名著： <br />　　　　西游记——骑白马的哥哥呦，我在西天路上等您 <br />　　　　红楼梦——孤女梦断豪门，情哥哥为你泪撒红尘 <br />　　　　水浒传——何去何从，三弱女身陷105虎狼壮汉 <br />　　　　三国演义——鞠躬尽瘁十一年，含辛茹苦的养父为弱智儿子流尽最后一滴血 <br />　　　　《机器猫》－－只愿此生不再让你哭泣，让我穿越时空来拯救你 <br />　　　　《还珠格格》----卖艺女翻墙中南海，巧遇主席之子成良缘 <br />　　　　《三只小猪》--亲哥哥的性命啊，我拿石头来捍卫。 <br />　　　　《小马过河》--满满幼子蹒跚路，母爱戳穿虚伪的谎言 <br />　　　　《三毛流浪记》--不堪回首的童年，流浪是唯一的伴 <br />　　　　《一帘幽梦》--我那支离破碎的家庭，我那支离破碎的春梦 <br />　　　　飞狐外传：痛苦的抉择，爱我的人和我爱的人 <br />　　　　雪山飞狐：阴差阳错呀，未来岳父竟是杀父凶手 <br />　　　　连城诀：惨绝人寰，少年蒙冤入狱被砍手指 <br />　　　　天龙八部：王子生世之谜---大理豪门的情孽纠缠 <br />　　　　射雕英雄传：感天动地呵，女博士和初中男子的爱情故事 <br />　　　　白马啸西风：一个少女的自白：他们都很好，我就是不喜欢 <br />　　　　鹿鼎记：谢谢你给我的爱：致我生命中的七个女人 <br />　　　　笑傲江湖：《正义干警含冤走千里，黑手党千金痴情苦相随》 <br />　　　　阿紫与小游：《爱情需要面具——心灵扭曲的私生女与惨遭巨变的富家男之间血淋淋的爱情故事》 <br />　　　　画眉嘴国王：《虚荣使她蒙羞，下堂妻在丈夫的怀里痛哭流涕》 <br />　　　　天方夜谭：《家庭暴力的一千零一个夜晚，为了我丈夫的前妻》 <br />　　　　《泰坦尼克号》：丰满痴情女回眸凝望半世纪 无奈叹情郎义薄云天堕深海 <br />　　　　《满城尽带黄金甲》 丰胸肥臀放荡继母 痴傻癫狂傻儿子 一场肉欲跟权利引发的乱伦争斗 <br />　　　　《功夫熊猫》 发奋图强的黑白少年哟，江湖上总会有你的一席之地！ <br />　　　　《墨攻》 平头肃杀的哥哥哟，无声哀怨地牢等你来拯救 <br />　　　　《亮剑》李云龙——《忠贞的妻哟，这隆隆炮火见证了我们刑场上的婚礼！》 <br />　　　　《武林外传》白展堂——《漂泊多年浪子终回头，你可知痴情老板娘为你一路守望？》 <br />　　　　祝无双---《多情警花泪涟涟，爱情哟，为何总是单行道？》 <br />　　　　郭芙蓉---《情义无价----名门女为激励落榜青年甘做打工妹》 <br />　　　　佟湘玉---《大爱无疆——她用真情暖化了失足青年那冷漠的心》 <br />　　　　《梁红玉》——《爱的神迹——从坐台小姐到军队女指挥官》 <br />　　　　《西施》——《为了爱，我甘做美女“无间道”》 <br />　　　　《貂蝉》——《报恩？报仇？——我终于用美色毁了那对高官父子》 <br />　　　　《昭君》——《人生传奇——从湖北土妞到远嫁异国的王妃》 <br />　　　　《梁山伯与祝英台》——《芳魂化蝶——那对被“门当户对”扼杀的殉情恋人啊》 <br />　　　　《杨教授和翁小姐》——《就是要和“爷爷”结婚——忘年恋人用真情大爱冷对无情人世》 <br />　　　　《陈圆圆》——《当尼姑是我渴望的归宿！——从高官情妇到村长二奶的苦命红颜》 <br />　　　　《女娲造人》——《玩泥巴玩出大事业——全球最手工泥塑女皇的发迹之路》 <br />　　　　《上海滩》——《宝贝女儿情迷古惑仔 黑帮老爹无奈起杀心》 <br />　　　　《华仔与娟娟》——《我风华绝代的华仔哥哥啊，你是娟娟心中永远的纠结》 </p>
		<p> </p>
<img src ="http://www.cppblog.com/Lee/aggbug/73112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-06 15:57 <a href="http://www.cppblog.com/Lee/archive/2009/02/06/73112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>75道逻辑思维题-------会作10道智商就是正常，会作30道就不是凡人，会作60道就是高智商稀有人才了！</title><link>http://www.cppblog.com/Lee/archive/2009/02/06/73094.html</link><dc:creator>David Lee</dc:creator><author>David Lee</author><pubDate>Fri, 06 Feb 2009 03:35:00 GMT</pubDate><guid>http://www.cppblog.com/Lee/archive/2009/02/06/73094.html</guid><wfw:comment>http://www.cppblog.com/Lee/comments/73094.html</wfw:comment><comments>http://www.cppblog.com/Lee/archive/2009/02/06/73094.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee/comments/commentRss/73094.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee/services/trackbacks/73094.html</trackback:ping><description><![CDATA[
		<p>
				<br />【1】假设有一个池塘，里面有无穷多的水。现有2个空水壶，容积分别为5升和6升。问题是如何只用这2个水壶从池塘里取得3升的水。</p>
		<p>【2】周雯的妈妈是豫林水泥厂的化验员。 一天，周雯来到化验室做作业。做完后想出去玩。 "等等，妈妈还要考你一个题目，"她接着说，"你看这6只做化验用的玻璃杯，前面3只盛满了水，后面3只是空的。你 能只移动1只玻璃杯，就便盛满水的杯子和空杯子间隔起来 吗?" 爱动脑筋的周雯，是学校里有名的"小机灵"，她只想了一会儿就做到了。 请你想想看，"小机灵"是怎样做的?</p>
		<p>【3】三个小伙子同时爱上了一 个姑娘，为了决定他们谁能娶这个姑娘，他们决定用手枪进行一次决斗。小李的命中率是30％，小黄比他好些，命中率是50％，最出色的枪手是小林，他从不失 误，命中率是100％。由于这个显而易见的事实，为公平起见，他们决定按这样的顺序：小李先开枪，小黄第二，小林最后。然后这样循环，直到他们只剩下一个 人。那么这三个人中谁活下来的机会最大呢？他们都应该采取什么样的策略？</p>
		<p>
				<br />【4】一间囚房里关押着两个犯人。每天监狱都会为这间囚房提供一罐汤，让这两个犯人自己来分。起初，这两个 人经常会发生争执，因为他们总是有人认为对方的汤比自己的多。后来他们找到了一个两全其美的办法：一个人分汤，让另一个人先选。于是争端就这么解决了。可 是，现在这间囚房里又加进来一个新犯人，现在是三个人来分汤。必须寻找一个新的方法来维持他们之间的和平。该怎么办呢？<br />按：心理问题，不是逻辑问题</p>
		<p>【5】在一张长方形的桌面上放了n个一样大小的圆形硬币。这些硬币中可能有一些不完全在桌面内，也可能有一些彼此重叠；当再多放一个硬币而它的圆心在桌面内时，新放的硬币便必定与原先某些硬币重叠。请证明整个桌面可以用4n个硬币完全覆盖</p>
		<p>【6】一个球、一把长度大约是球的直径2/3长度的直尺.你怎样测出球的半径？方法很多，看看谁的比较巧妙</p>
		<p>【7】五个大小相同的一元人民币硬币。要求两两相接触，应该怎么摆？</p>
		<p>【8】猜牌问题<br />S先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌：红桃A、Q、4 黑桃J、8、4、2、7、3 草花K、Q、5、4、6 方块A、5。约翰教授从这16张牌中挑出一张牌来，并把这张牌的点数告诉 P先生，把这张牌的花色告诉Q先生。这时，约翰教授问P先生和Q 先生：你们能从已知的点数或花色中推知这张牌是什么牌吗？ 于是，S先生听到如下的对话：P先生：我不知道这张牌。<br />Q先生：我知道你不知道这张牌。<br />P先生：现在我知道这张牌了。 <br />Q先生：我也知道了。<br />听罢以上的对话，S先生想了一想之后，就正确地推出这张牌是什么牌。 <br />请问：这张牌是什么牌？ <br />【9】一个教授逻辑学的教授，有三个学生，而且三个学生均非常聪明！ <br />一天教授给他们出了一个题，教授在每个人脑门上贴了一张纸条并告诉他们，每个人的纸条上都写了一个正整数，且某两个数的和等于第三个！（每个人可以看见另两个数，但看不见自己的） <br />教授问第一个学生：你能猜出自己的数吗？回答：不能，问第二个，不能，第三个，不能，再问第一个，不能，第二个，不能，第三个：我猜出来了，是144！教授很满意的笑了。请问您能猜出另外两个人的数吗？</p>
		<p>【10】某城市发生了一起汽车撞人逃跑事件<br />该城市只有两种颜色的车,蓝色15% 绿色85%<br />事发时有一个人在现场看见了<br />他指证是蓝车<br />但是根据专家在现场分析,当时那种条件能看正确的可能性是80%<br />那么,肇事的车是蓝车的概率到底是多少?</p>
		<p>【11】有一人有240公斤 水，他想运往干旱地区赚钱。他每次最多携带60公斤，并且每前进一公里须耗水1公斤（均匀耗水）。假设水的价格在出发地为0，以后，与运输路程成正比， （即在10公里处为10元/公斤，在20公里处为20元/公斤......），又假设他必须安全返回，请问，他最多可赚多少钱？</p>
		<p>【12】现在共有100匹马跟100块石头，马分3种，大型马；中型马跟小型马。其中一匹大马一次可以驮3块石头，中型马可以驮2块，而小型马2头可以驮一块石头。问需要多少匹大马，中型马跟小型马？（问题的关键是刚好必须是用完100匹马）</p>
		<p>【13】1=5 2=15 3=215 4=2145 那么5=?</p>
		<p>【14】有2n个人排队进电影院，票价是50美分。在这2n个人当中，其中n个人只有50美分，另外n个人有1美元（纸票子）。愚蠢的电影院开始卖票时1分钱也没有。<br />问： 有多少种排队方法 使得 每当一个拥有1美元买票时，电影院都有50美分找钱<br />注： <br />1美元=100美分<br />拥有1美元的人，拥有的是纸币，没法破成2个50美分</p>
		<p>【15】一个人花8块钱买了一只鸡，9块钱卖掉了，然后他觉得不划算，花10块钱又买回来了，11块卖给另外一个人。问他赚了多少?</p>
		<p>【16】有一种体育竞赛共含M个项目，有运动员A，B，C参加，在每一项目中，第一,第二,第三名分别的X，Y，Z分，其中X,Y,Z为正整数且X&gt;Y&gt;Z。最后A得22分，B与C均得9分，B在百米赛中取得第一。求M的值，并问在跳高中谁得第二名。</p>
		<p>
				<br />【17】前提：<br />1 有五栋五种颜色的房子<br />2 每一位房子的主人国籍都不同<br />3 这五个人每人只喝一种饮料，只抽一种牌子的香烟，只养一种宠物<br />4 没有人有相同的宠物，抽相同牌子的香烟，喝相同的饮料<br />提示：<br />１　 英国人住在红房子里<br />２　 瑞典人养了一条狗<br />３　 丹麦人喝茶<br />４　 绿房子在白房子左边<br />５　 绿房子主人喝咖啡<br />６　 抽ＰＡＬＬ　ＭＡＬＬ烟的人养了一只鸟<br />７　 黄房子主人抽ＤＵＮＨＩＬＬ烟<br />８　 住在中间那间房子的人喝牛奶<br />９　 挪威人住第一间房子<br />１０　抽混合烟的人住在养猫人的旁边<br />１１　养马人住在抽ＤＵＮＨＩＬＬ烟的人旁边<br />１２　抽ＢＬＵＥ　ＭＡＳＴＥＲ烟的人喝啤酒<br />１３　德国人抽ＰＲＩＮＣＥ烟<br />１４　挪威人住在蓝房子旁边<br />１５　抽混合烟的人的邻居喝矿泉水</p>
		<p>问题是：谁养鱼？？？</p>
		<p>【18】5个人来自不同地方，住不同房子，养不同动物，吸不同牌子香烟，喝不同饮料，喜欢不同食物。根据以下线索确定谁是养猫的人。<br />1． 红房子在蓝房子的右边，白房子的左边（不一定紧邻）<br />2． 黄房子的主人来自香港，而且他的房子不在最左边。<br />3． 爱吃比萨的人住在爱喝矿泉水的人的隔壁。<br />4． 来自北京的人爱喝茅台，住在来自上海的人的隔壁。<br />5． 吸希尔顿香烟的人住在养马人的右边隔壁。<br />6． 爱喝啤酒的人也爱吃鸡。<br />7． 绿房子的人养狗。<br />8． 爱吃面条的人住在养蛇人的隔壁。<br />9． 来自天津的人的邻居（紧邻）一个爱吃牛肉，另一个来自成都。<br />10．养鱼的人住在最右边的房子里。<br />11．吸万宝路香烟的人住在吸希尔顿香烟的人和吸“555”香烟的人的中间（紧邻）<br />12．红房子的人爱喝茶。<br />13．爱喝葡萄酒的人住在爱吃豆腐的人的右边隔壁。<br />14．吸红塔山香烟的人既不住在吸健牌香烟的人的隔壁，也不与来自上海的人相邻。<br />15．来自上海的人住在左数第二间房子里。<br />16．爱喝矿泉水的人住在最中间的房子里。<br />17．爱吃面条的人也爱喝葡萄酒。<br />18．吸“555”香烟的人比吸希尔顿香烟的人住的靠右</p>
		<p>【19】斗地主附残局 <br />地主手中牌2、K、Q、J、10、9、8、8、6、6、5、5、3、3、3、3、7、7、7、7 <br />长工甲手中牌大王、小王、2、A、K、Q、J、10、Q、J、10、9、8、5、5、4、4 <br />长工乙手中牌2、2、A、A、A、K、K、Q、J、10、9、9、8、6、6、4、4 <br />三家都是明手，互知底牌。要求是：在三家都不打错牌的情况下，地主必须要么输要么赢。<br />问：哪方会赢？</p>
		<p>【20】一楼到十楼的每层电梯门口都放着一颗钻石，钻石大小不一。你乘坐电梯从一楼到十楼，每层楼电梯门都会打开一次，只能拿一次钻石，问怎样才能拿到最大的一颗？</p>
		<p>【21】U2合唱团在17分钟 内得赶到演唱会场，途中必需跨过一座桥，四个人从桥的同一端出发，你得帮助他们到达另一端，天色很暗，而他们只有一只手电筒。一次同时最多可以有两人一起 过桥，而过桥的时候必须持有手电筒，所以就得有人把手电筒带来带去，来回桥两端。手电筒是不能用丢的方式来传递的。四个人的步行速度各不同，若两人同行则 以较慢者的速度为准。Bono需花1分钟过桥，Edge需花2分钟过桥，Adam需花5分钟过桥，Larry需花10分钟过桥。他们要如何在17分钟内过 桥呢？</p>
		<p>【22】一个家庭有两个小孩，其中有一个是女孩，问另一个也是女孩的概率<br />（假定生男生女的概率一样）</p>
		<p>【23】为什么下水道的盖子是圆的？</p>
		<p>【24】有7克、2克砝码各一个，天平一只，如何只用这些物品三次将140克的盐分成50、90克各一份？</p>
		<p>【25】芯片测试：有2k块芯片，已知好芯片比坏芯片多．请设计算法从其中找出一片 <br />好芯片，说明你所用的比较次数上限． <br />其中：好芯片和其它芯片比较时，能正确给出另一块芯片是好还是坏． <br />坏芯片和其它芯片比较时，会随机的给出好或是坏。</p>
		<p>【26】话说有十二个鸡蛋，有一个是坏的（重量与其余鸡蛋不同），现要求用天平称三次，称出哪个鸡蛋是坏的！</p>
		<p>【27】100个人回答五道试题，有81人答对第一题，91人答对第二题，85人答对第三题，79人答对第四题，74人答对第五题，答对三道题或三道题以上的人算及格， 那么，在这100人中，至少有（ ）人及格。</p>
		<p>【28】陈奕迅有首歌叫十年<br />吕珊有首歌叫3650夜<br />那现在问,十年可能有多少天?</p>
		<p>【29】 <br />1 <br />1 1 <br />2 1 <br />1 2 1 1 <br />1 1 1 2 2 1 <br />下一行是什么？<br />【30】烧一根不均匀的绳要用一个小时，如何用它来判断半个小时？<br />烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢? （微软的笔试题）</p>
		<p>【31】共有三类药，分别重1g,2g,3g，放到若干个瓶子中，现在能确定每个瓶子中只有其中一种药，且每瓶中的药片足够多，能只称一次就知道各个瓶子中都是盛的哪类药吗？<br />如果有4类药呢？5类呢？N类呢(N可数)？<br />如果是共有m个瓶子盛着n类药呢(m，n为正整数，药的质量各不相同但各种药的质量已知)？你能只称一次就知道每瓶的药是什么吗？<br />注：当然是有代价的，称过的药我们就不用了</p>
		<p>【32】假设在桌上有三个密封 的盒，一个盒中有2枚银币(1银币=10便士)，一个盒中有2枚镍币(1镍币=5便士)，还有一个盒中有1枚银币和1枚镍币。这些盒子被标上10便士、 15便士和20便士，但每个标签都是错误的。允许你从一个盒中拿出1枚硬币放在盒前，看到这枚硬币，你能否说出每个盒内装的东西呢？</p>
		<p>【33】有一个大西瓜,用水果刀平整地切,总共切9刀,最多能切成多少份,最少能切成多少份?<br />主要是过程，结果并不是最重要的</p>
		<p>【34】一个巨大的圆形水池，周围布满了老鼠洞。猫追老鼠到水池边，老鼠未来得及进洞就掉入水池里。猫继续沿水池边缘企图捉住老鼠（猫不入水）。已知V猫=4V鼠。问老鼠是否有办法摆脱猫的追逐？</p>
		<p>【35】有三个桶，两个大的可装8斤的水，一个小的可装3斤的水，现在有16斤水装满了两大桶就是8斤的桶，小桶空着，如何把这16斤水分给4个人，每人4斤。没有其他任何工具，4人自备容器，分出去的水不可再要回来。</p>
		<p>【36】从前有一位老钟表匠， 为一个教堂装一只大钟。他年老眼花，把长短针装配错了，短针走的速度反而是长针的12倍。装配的时候是上午6点，他把短针指在“6 ”上，长针指在“12”上。老钟表匠装好就回家去了。人们看这钟一会儿7点，过了不一会儿就8点了，都很奇怪，立刻去找老钟表匠。等老钟表匠赶到，已经是 下午7点多钟。他掏出怀表来一对，钟准确无误，疑心人们有意捉弄他，一生气就回去了。这钟还是8点、9点地跑，人们再去找钟表匠。老钟表匠第二天早晨8点 多赶来用表一对，仍旧准确无误。 请你想一想，老钟表匠第一次对表的时候是7点几分？第二次对表又是8点几分？</p>
		<p>【37】今有2匹马、3头牛和4只羊，它们各自的总价都不满10000文钱（古时的货币单位）。如果2匹马加上1头牛，或者3 头牛加上1只羊，或者4只羊加上1匹马，那么它们各自的总价都正好是10000文钱了。问：马、牛、羊的单价各是多少文钱？</p>
		<p>【38】一天，harlan的 店里来了一位顾客，挑了25元的货，顾客拿出100元，harlan没零钱找不开，就到隔壁飞白的店里把这100元换成零钱，回来给顾客找了75元零钱。 过一会，飞白来找harlan，说刚才的是假钱，harlan马上给飞白换了张真钱，问harlan赔了多少钱？</p>
		<p>【39】猴子爬绳<br />这道力学怪题乍看非常简单，可是据说它却使刘易斯．卡罗尔感到困惑。至于这道<br />怪题是否由这位因《爱丽丝漫游奇境记》而闻名的牛津大学数学专家提出来的，那就不<br />清楚了。总之，在一个不走运的时刻，他就下述问题征询人们的意见:<br />一根绳子穿过无摩擦力的滑轮，在其一端悬挂着一只10磅重的砝码，绳子的另一端<br />有只猴子，同砝码正好取得平衡。当猴子开始向上爬时，砝码将如何动作呢?<br />"真奇怪，"卡罗尔写道，"许多优秀的数学家给出了截然不同的答案。普赖斯认为砝<br />码将向上升，而且速度越来越快。克利夫顿(还有哈考特)则认为，砝码将以与猴子一样<br />的速度向上升起，然而桑普森却说，砝码将会向下降!"<br />一位杰出的机械工程师说"这不会比苍蝇在绳子上爬更起作用"，而一位科学家却认<br />为"砝码的上升或下降将取决于猴子 吃苹果速度的倒数"，然而还得从中求出猴子尾巴的<br />平方根。严肃地说，这道题目非常有趣，值得认真推敲。它很能说明趣题与力学问题之<br />间的紧密联系。</p>
		<p>【40】两个空心球，大小及重量相同，但材料不同。一个是金，一个是铅。空心球表面图有相同颜色的油漆。现在要求在不破坏表面油漆的条件下用简易方法指出哪个是金的，哪个是铅的。</p>
		<p>【41】有23枚硬币在桌上，10枚正面朝上。假设别人蒙住你的眼睛，而你的手又摸不出硬币的 <br />反正面。让你用最好的方法把这些硬币分成两堆，每堆正面朝上的硬币个数相同。</p>
		<p>【42】三个村庄A、B、C和三个城镇A、B、C坐落在如图所示的环形山内。 <br />由于历史原因，只有同名的村与镇之间才有来往。为方便交通，他们 <br />准备修铁路。问题是：如何在这个环形山内修三条铁路连通A村与A镇， <br />B村与B镇，C村与C镇。而这些铁路相互不能相交。（挖山洞、修立交 <br />桥都不算，绝对是平面问题）。想出答案再想想这个题说明什么问题。</p>
		<p>●●●●●●●●●Ｃ●●●●●●●●●● <br />●                                    ● <br />●                                    ● <br />●                                    ●<br />●                                    ●<br />●                                    ●<br />●                                    ●<br />Ａ Ｃ Ｂ <br />●                ●                  ● <br />●                ●                  ●<br />●                ●                  ●<br />●                ●                  ●<br />●                ●                  ●<br />●                ●                  ●<br />●                ●                  ●<br />●●●●●●●●●●●●●●●●●●●●</p>
		<p>【43】屋里三盏灯,屋外三个开关,一个开关仅控制一盏灯,屋外看不到屋里<br />怎样只进屋一次,就知道哪个开关控制哪盏灯?<br />四盏呢~</p>
		<p>【44】2+7-2+7全部有火柴根组成，移动其中任何一根，答案要求为30<br />说明：因为书写问题作如下解释，2是由横折横三根组成，7是由横折两根组成</p>
		<p>【45】5名海盗抢得了窖藏的100块金子，并打算瓜分这些战利品。这是一些讲民主的海盗（当然是他们自己特有的民主），他们的习惯 <br />是按下面的方式进行分配：最厉害的一名海盗提出分配方案，然后所有的海盗（包 <br />括提出方案者本人）就此方案进行表决。如果50%或更多的海盗赞同此方案，此方 <br />案就获得通过并据此分配战利品。否则提出方案的海盗将被扔到海里，然后下一名 <br />最厉害的海盗又重复上述过程。 <br />所有的海盗都乐于看到他们的一位同伙被扔进海里，不过，如果让他们选择的 <br />话，他们还是宁可得一笔现金。他们当然也不愿意自己被扔到海里。所有的海盗都 <br />是有理性的，而且知道其他的海盗也是有理性的。此外，没有两名海盗是同等厉害 <br />的——这些海盗按照完全由上到下的等级排好了座次，并且每个人都清楚自己和其 <br />他所有人的等级。这些金块不能再分，也不允许几名海盗共有金块，因为任何海盗 <br />都不相信他的同伙会遵守关于共享金块的安排。这是一伙每人都只为自己打算的海 <br />盗。 <br />最凶的一名海盗应当提出什么样的分配方案才能使他获得最多的金子呢？ <br />【46】他们中谁的存活机率最大？<br />5个囚犯，分别按1-5号在装有100颗绿豆的麻袋抓绿豆，规定每人至少抓一颗，而抓得最多和最少的人将被处死，而且，他们之间不能交流，但在抓的时候，可以摸出剩下的豆子数。问他们中谁的存活几率最大？提示：　　　　　　 <br />1，他们都是很聪明的人　　　　　　 <br />2，他们的原则是先求保命，再去多杀人　　　　　　 <br />3，100颗不必都分完　　　　　　 <br />4，若有重复的情况，则也算最大或最小，一并处死</p>
		<p>【47】有5只猴子在海边发现 一堆桃子,决定第二天来平分.第二天清晨,第一只猴子最早来到,它左分右分分不开,就朝海里扔了一只,恰好可以分成5份,它拿上自己的一份走了.第 2,3,4,5只猴子也遇到同样的问题,采用了同样的方法,都是扔掉一只后,恰好可以分成5份.问这堆桃子至少有多少只？</p>
		<p>【48】话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好有有棵椰子树,还有一只猴子!<br />大家把椰子全部采摘下来放在一起,但是天已经很晚了,所以就睡觉先.<br />晚上某个家伙悄悄的起床,悄悄的将椰子分成5份,结果发现多一个椰子,顺手就给了幸运的猴子,然后又悄悄的藏了一份,然后把剩下的椰子混在一起放回原处,最后还是悄悄滴回去睡觉了.<br />过了会儿,另一个家伙也悄悄的起床,悄悄的将剩下的椰子分成5份,结果发现多一个椰子,顺手就又给了幸运的猴子,然后又悄悄滴藏了一份,把剩下的椰子混在一起放回原处,最后还是悄悄滴回去睡觉了.<br />又过了一会 ...<br />...<br />又过了一会 ...<br />总之5个家伙都起床过,都做了一样的事情 <br />早上大家都起床,各自心怀鬼胎的分椰子了,这个猴子还真不是一般的幸运,因为这次把椰子分成5分后居然还是多一个椰子,只好又给它了.<br />问题来了,这堆椰子最少有多少个?</p>
		<p>【49】小明和小强都是张老师的学生，张老师的生日是M月N日，<br />2人都知道张老师的生日是下列10组中的一天，<br />张老师把M值告诉了小明，把N值告诉了小强，<br />张老师问他们知道他的生日是那一天吗？<br />3月4日 3月5日 3月8日<br />6月4日 6月7日<br />9月1日 9月5日<br />12月1日 12月2日 12月8日<br />小明说：如果我不知道的话，小强肯定也不知道<br />小强说：本来我也不知道，但是现在我知道了<br />小明说：哦，那我也知道了<br />请根据以上对话推断出张老师的生日是哪一天</p>
		<p>【50】一逻辑学家误入某部 落，被囚于牢狱，酋长欲意放行，他对逻辑学家说：“今有两门，一为自由，一为死亡，你可任意开启一门。现从两个战士中选择一人负责解答你所提的任何一个问 题（Y/N），其中一个天性诚实，一人说谎成性，今后生死任你选择。”逻辑学家沉思片刻，即向一战士发问，然后开门从容离去。逻辑学家应如何发问？</p>
		<p>【51】说从前啊,有一个富 人,他有30个孩子,其中15个是已故的前妻所生,其余15个是继室所生,这后一个妇人很想让她自己所生的最年长的儿子继承财产,于是,有一天,他就向他 说:"亲爱的丈夫啊,你就要老了,我们应该定下来谁将是你的继承人,让我们把我们的30个孩子排成一个圆圈,从他们中的一个数起,每逢到10就让那个孩子 站出去,直到最后剩下哪个孩子,哪个孩子就继承你的财产吧!"富人一想,我靠,这个题意相当有内涵了,不错,仿佛很公平,就这么办吧~不过,当剔选过程不 断进行下去的时候,这个富人傻眼了,他发现前14个被剔除的孩子都是前妻生的,而且下一个要被剔除的还是前妻生的,富人马上大手一挥,停,现在从这个孩子 倒回去数, 继室,就是这个歹毒的后妈一想,倒数就倒数,我15个儿子还斗不过你一个啊~她立即同意了富人的动议,你猜,到底谁做了继承人呢~</p>
		<p>【52】“有一牧场，已知养牛27头，6天把草吃尽；养牛23头，9天把草吃尽。如果养牛21头，那么几天能把牧场上的草吃尽呢？并且牧场上的草是不断生长的。”</p>
		<p>【53】一个商人骑一头驴要穿越1000公里长的沙漠，去卖3000根胡萝卜。已知驴一次性可驮1000根胡萝卜，但每走一公里又要吃掉一根胡萝卜。问：商人共可卖出多少胡萝卜？</p>
		<p>【54】10箱黄金，每箱100块，每块一两<br />有贪官，把某一箱的每块都磨去一钱<br />请称一次找到不足量的那个箱子</p>
		<p>【55】你让工人为你工作７天，给工人的回报是一根金条。金条平分成相连的７段，你必须在每天结束时都付费，如果只许你两次把金条弄断，你如何给你的工人付费？</p>
		<p>【56】有十瓶药，每瓶里都装有100片药（仿佛现在装一百片的少了，都是十片二十片的，不管，咱们就这么来了），其中有八瓶里的药每片重10克，另有两瓶里的药每片重9克。用一个蛮精确的小秤，只称一次，如何找出份量较轻的那两个药瓶？</p>
		<p>【57】一个经理有三个女儿， 三个女儿的年龄加起来等于13，三个女儿的年龄乘起来等于经理自己的年龄，有一个下属已知道经理的年龄，但仍不能确定经理三个女儿的年龄，这时经理说只有 一个女儿的头发是黑的，然后这个下属就知道了经理三个女儿的年龄。请问三个女儿的年龄分别是多少？为什么？</p>
		<p>【58】有三个人去住旅馆，住 三间房，每一间房$10元，于是他们一共付给老板$30，第二天，老板觉得三间房只需要$25元就够了于是叫小弟退回$5给三位客人，谁知小弟贪心,只退 回每人$1，自己偷偷拿了$2，这样一来便等于那三位客人每人各花了九元，于是三个人一共花了$27，再加上小弟独吞了不$2，总共是$29。可是当初他 们三个人一共付出$30那么还有$1呢？</p>
		<p>【59】有两位盲人，他们都各自买了两对黑袜和两对白袜，八对袜了的布质、大小完全相同，　　而每对袜了都有一张商标纸连着。两位盲人不小心将八对袜了混在一起。他们每人怎样才能取回黑袜和白袜各两对呢？</p>
		<p>【60】有一辆火车以每小时 15公里的速度离开洛杉矶直奔纽约，另一辆火车以每小时20公里的速度从纽约开往洛杉矶。如果有一只鸟，以30公里每小时的速度和两辆火车同时启动，从洛 杉矶出发，碰到另一辆车后返回，依次在两辆火车来回飞行，直到两辆火车相遇，请问，这只小鸟飞行了多长距离？</p>
		<p>【61】你有两个罐子，50个红色弹球，50个蓝色弹球，随机选出一个罐子，随机选取出一个弹球放入罐子，怎么给红色弹球最大的选中机会？在你的计划中，得到红球的准确几率是多少？</p>
		<p>【62】你有四个装药丸的罐子，每个药丸都有一定的重量，被污染的药丸是没被污染的重量＋1.只称量一次，如何判断哪个罐子的药被污染了？</p>
		<p>【63】对一批编号为1～100，全部开关朝上(开)的灯进行以下*作：凡是1的倍数反方向拨一次开关；2的倍数反方向又拨一次开关；3的倍数反方向又拨一次开关……问：最后为关熄状态的灯的编号。</p>
		<p>【64】想象你在镜子前，请问，为什么镜子中的影像可以颠倒左右，却不能颠倒上下？</p>
		<p>【65】一群人开舞会，每人头 上都戴着一顶帽子。帽子只有黑白两种，黑的至少有一顶。每个人都能看到其它人帽子的颜色，却看不到自己的。主持人先让大家看看别人头上戴的是什幺帽子，然 后关灯，如果有人认为自己戴的是黑帽子，就打自己一个耳光。第一次关灯，没有声音。于是再开灯，大家再看一遍，关灯时仍然鸦雀无声。一直到第三次关灯，才 有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子？</p>
		<p>【66】两个圆环，半径分别是1和2，小圆在大圆内部绕大圆圆周一周，问小圆自身转了几周？如果在大圆的外部，小圆自身转几周呢？</p>
		<p>【67】 1元钱一瓶汽水，喝完后两个空瓶换一瓶汽水，问：你有20元钱，最多可以喝到几瓶汽水？</p>
		<p>【68】有3顶红帽子，4顶黑 帽子，5顶白帽子。让10个人从矮到高站成一队，给他们每个人头上戴一顶帽子。每个人都看不见自己戴的帽子的颜色，却只能看见站在前面那些人的帽子颜色。 （所以最后一个人可以看见前面9个人头上帽子的颜色，而最前面那个人谁的帽子都看不见。现在从最后那个人开始，问他是不是知道自己戴的帽子颜色，如果他回 答说不知道，就继续问他前面那个人。假设最前面那个人一定会知道自己戴的是黑帽子。为什么？</p>
		<p>【69】假设排列着100个乒乓球，由两个人轮流拿球装入口袋，能拿到第100个乒乓球的人为胜利者。条件是：每次拿球者至少要拿1个，但最多不能超过5个，问：如果你是最先拿球的人，你该拿几个？以后怎么拿就能保证你能得到第100个乒乓球？</p>
		<p>【70】卢姆教授说：“有一次 我目击了两只山羊的一场殊死决斗，结果引出了一个有趣的数学问题。我的一位邻居有一只山羊，重54磅，它已有好几个季度在附近山区称王称霸。后来某个好事 之徒引进了一只新的山羊，比它还要重出3磅。开始时，它们相安无事，彼此和谐相处。可是有一天，较轻的那只山羊站在陡峭的山路顶上，向它的竞争对手猛扑过 去，那对手站在土丘上迎接挑战，而挑战者显然拥有居高临下的优势。不幸的是，由于猛烈碰撞，两只山羊都一命呜呼了。<br />现在要讲一讲本题的奇妙之处。对饲养山羊颇有研究，还写过书的乔治．阿伯克龙比说道：“通过反复实验，我发现，动量相当于一个自20英尺高处坠落下来 的30磅重物的一次撞击，正好可以打碎山羊的脑壳，致它死命。”如果他说得不错，那么这两只山羊至少要有多大的逼近速度，才能相互撞破脑壳？你能算出来 吗？</p>
		<p>【71】据说有人给酒肆的老板娘出了一个难题：此人明明知道店里只有两个舀酒的勺子，分别能舀7两和11两酒，却硬要老板娘卖给他2两酒。聪明的老板娘毫不含糊，用这两个勺子在酒缸里舀酒，并倒来倒去，居然量出了2两酒，聪明的你能做到吗？</p>
		<p>【72】已知： 每个飞机只有一个油箱， 飞机之间可以相互加油（注意是相互，没有加油机） 一箱油可供一架飞机绕地球飞半圈，问题：为使至少一架飞机绕地球一圈回到起飞时的飞机场，至少需要出动几架飞机？（所有飞机从同一机场起飞，而且必须安全 返回机场，不允许中途降落，中间没有飞机场）</p>
		<p>【73】在9个点上画10条直线，要求每条直线上至少有三个点？</p>
		<p>【74】一个岔路口分别通向诚实国和说谎国。来了两个人，已知一个是诚实国的，另一个是说谎国的。诚实国永远说实话，说谎国永远说谎话。现在你要去说谎国，但不知道应该走哪条路，需要问这两个人。请问应该怎么问？</p>
		<p>【75】在一天的24小时之中，时钟的时针、分针和秒针完全重合在一起的时候有几次？都分别是什么时间？你怎样算出来的？<br /> <br /></p>
<img src ="http://www.cppblog.com/Lee/aggbug/73094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee/" target="_blank">David Lee</a> 2009-02-06 11:35 <a href="http://www.cppblog.com/Lee/archive/2009/02/06/73094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>