﻿<?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++博客-luqingfei@C++-随笔分类-C++基础</title><link>http://www.cppblog.com/luqingfei/category/9464.html</link><description>&lt;font color='gray'&gt;为中华之崛起而崛起！&lt;/font&gt;&lt;br/&gt;
兼听则明，偏听则暗。
</description><language>zh-cn</language><lastBuildDate>Sun, 21 Jul 2013 14:27:04 GMT</lastBuildDate><pubDate>Sun, 21 Jul 2013 14:27:04 GMT</pubDate><ttl>60</ttl><item><title>使用lib.exe生成.lib文件</title><link>http://www.cppblog.com/luqingfei/archive/2013/07/15/201817.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Mon, 15 Jul 2013 07:34:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2013/07/15/201817.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/201817.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2013/07/15/201817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/201817.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/201817.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">在程序使用Dll有两个加载方式，一种是动态方式，就是LoadLibrary载入Dll,然后用GetProcAddress来加载需要使用的Dll函数。另一种就是静态连接方式，将dll生成的lib，加入到工程中，然后就可以很方便的调用。</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">我们知道很多dll在发布时不提供lib，没有lib我们就不能静态的加载，所以得想办法来生成一个lib，在vs2005中有这样的一个命令</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">不过我们还需要一个def文件，怎样来获得一个def文件哪？</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">我们知道def是一个库导出文件 简单的格式是：EXPORTS&nbsp; 和 一些导出函数</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">我们可以用vc6自带的一个depends来查看dll中有哪些导出函数，来手动做一个.def文件</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">将xxx.dll和xxx.def，放到一个文件夹中，启动&#8220;Visual Studio 2005 命令提示&#8221;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">将工作目录切换到放有xxx.dll和xxx.def的文件夹中输入：</p><div style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">lib /def:xxx.def /MACHINE:x86</div><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">这样将会产生一个xxx.lib了，将此lib文件和dll文件拷到工程中，就可以进行静态链接了</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><a href="http://blog.csdn.net/twtzw/article/details/2733783" style="font-family: verdana, 'courier new'; line-height: 21px;"></a></p><img src ="http://www.cppblog.com/luqingfei/aggbug/201817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2013-07-15 15:34 <a href="http://www.cppblog.com/luqingfei/archive/2013/07/15/201817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何区分导入库和静态库</title><link>http://www.cppblog.com/luqingfei/archive/2013/07/15/201816.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Mon, 15 Jul 2013 07:32:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2013/07/15/201816.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/201816.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2013/07/15/201816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/201816.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/201816.html</trackback:ping><description><![CDATA[<div>通过命令 &gt;lib /list Demo.lib</div><div></div><div>如果该 Demo.lib是静态库，输出如下：</div><div>&gt;lib /list Demo.lib</div><div>Microsoft (R) Library Manager Version 8.00.50727.42</div><div>Copyright (C) Microsoft Corporation. All rights reserved.</div><div></div><div>.\Debug\Demo.obj</div><div>.\Debug\Person.obj</div><div>.\Debug\stdafx.obj</div><div>.\Debug\Demo.res</div><div></div><div></div><div></div><div></div><div>如果该 Demo.lib是导入库，输出如下：</div><div>&gt;lib /list Demo.lib</div><div>Microsoft (R) Library Manager Version 8.00.50727.42</div><div>Copyright (C) Microsoft Corporation. &nbsp;All rights reserved.</div><div></div><div>Demo.dll</div><div>Demo.dll</div><div>Demo.dll</div><div>Demo.dll</div><div>Demo.dll</div><div>Demo.dll</div><div>Demo.dll<br /><br /><br />转：<a href="http://blog.sina.com.cn/s/blog_611b75a80100emow.html">http://blog.sina.com.cn/s/blog_611b75a80100emow.html</a></div><img src ="http://www.cppblog.com/luqingfei/aggbug/201816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2013-07-15 15:32 <a href="http://www.cppblog.com/luqingfei/archive/2013/07/15/201816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>lib文件</title><link>http://www.cppblog.com/luqingfei/archive/2013/07/15/201815.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Mon, 15 Jul 2013 07:25:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2013/07/15/201815.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/201815.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2013/07/15/201815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/201815.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/201815.html</trackback:ping><description><![CDATA[<div>.lib是一种文件名后缀</div><div>该文件为Windows操作系统中的库文件，相当于Linux中的.a或.o、.so文件</div><div>lib有静态lib和动态lib之分。</div><div></div><div>lib文件通过编译才可以使用编译分静态与动态之分。</div><div></div><div>静态编译</div><div>静态lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序</div><div>动态编译</div><div>动态lib相当于一个h文件，是对实现部分（.dll文件）的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中，运行时候需要相应的dll文件支持</div><div></div><div></div><div>一个lib文件是obj文件的集合。当然，其中还夹杂着其他一些辅助信息，目的是为了让编译器能够准确找到对应的obj文件。我们可以通过tlib.exe（在tc2.0下的根目录）来对lib文件进行操作，你可以把自己生成的obj文件通过tlib命令加入到一个lib文件中，也可以把lib文件内的obj文件进行删除操作，还可以把内部的obj文件给提取出来。明白了lib文件的大致结构以及对它的具体操作，在学习C语言的过程中，就会又多了一个切入点对C语言具体实现进行研究。</div><div></div><div></div><div>与dll区别</div><div>(1)lib是编译时需要的，dll是运行时需要的。</div><div>如果要完成源代码的编译，有lib就够了。</div><div>如果也使动态连接的程序运行起来，有dll就够了。</div><div>在开发和调试阶段，当然最好都有。</div><div></div><div></div><div>(2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的，而dll文件是运行期才会被调用的。如果有dll文件，那么对应的lib文件一般是一些索引信息，具体的实现在dll文件中。如果只有lib文件，那么这个lib文件是静态编译出来的，索引和实现都在其中。静态编译的lib文件有好处：给用户安装时就不需要再挂动态库了。但也有缺点，就是导致应用程序比较大，而且失去了动态库的灵活性，在版本升级时，同时要发布新的应用程序才行。</div><div></div><div>(3)在动态库的情况下，有两个文件，一个是引入库（.LIB）文件，一个是DLL文件，引入库文件包含被DLL导出的函数的名称和位置，DLL包含实际的函数和数据，应用程序使用LIB文件链接到所需要使用的DLL文件，库中的函数和数据并不复制到可执行文件中，因此在应用程序的可执行文件中，存放的不是被调用的函数代码，而是DLL中所要调用的函数的内存地址，这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来，从而节省了内存资源。从上面的说明可以看出，DLL文件必须随应用程序一起发行，否则应用程序将会产生错误。</div><div></div><img src ="http://www.cppblog.com/luqingfei/aggbug/201815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2013-07-15 15:25 <a href="http://www.cppblog.com/luqingfei/archive/2013/07/15/201815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]动态链接库、静态库、import库区别</title><link>http://www.cppblog.com/luqingfei/archive/2013/07/14/201792.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Sun, 14 Jul 2013 07:11:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2013/07/14/201792.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/201792.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2013/07/14/201792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/201792.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/201792.html</trackback:ping><description><![CDATA[<div><strong style="font-size: 14pt;">动态链接库、静态库、import库区别</strong></div><div></div><div><strong>动态链接库(Dynamic Linked Library)：</strong></div><div>Windows为应用程序提供了丰富的函数调用，这些函数调用都包含在动态链接库中。其中有3个最重要的DLL，Kernel32.dll，它包含用于管理内存、进程和线程的各个函数；</div><div></div><div>User32.dll，它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数；GDI32.dll，它包含用于画图和显示文本的各个函数。</div><div></div><div><strong>静态库(Static Library)：</strong></div><div>函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下，在编译链接可执行文件时，链接器从库中复制这些函数和数据并把它们和应用程序的其它模块</div><div></div><div>组合起来创建最终的可执行文件(.EXE文件)。</div><div></div><div><strong>导入库(Import Library)：</strong></div><div>在使用动态链接库的时候，往往提供两个文件：一个引入库和一个DLL。引入库包含被DLL导出的函数和变量的符号名，DLL包含实际的函数和数据。在编译链接可执行文件时，只需</div><div></div><div>要链接引入库，DLL中的函数代码和数据并不复制到可执行文件中，在运行的时候，再去加载DLL，访问DLL中导出的函数。</div><div></div><div>在运行Windows程序时，它通过一个被称作&#8220;动态链接&#8221;的进程与Windows相接。一个Windows的.EXE文件拥有它使用不同动态链接库的引用，所使用的函数即在那里。当Windows程</div><div></div><div>序被加载到内存中时，程序中的调用被指向DLL函数的入口，如果DLL不在内存中，系统就将其加载到内存中。</div><div></div><div>当链接Windows程序以产生一个可执行文件时，你必须链接由编程环境提供的专门的&#8220;导入库(import library)库&#8221;。这些导入库包含了动态链接库名称和所有Windows函数调用的</div><div></div><div>引用信息。链接程序使用该信息在.EXE文件中构造一个表，当加载程序时，Windows使用它将调用转换为Windows函数。<br /></div><div></div><div><strong>静态库与导入库的区别：</strong></div><div>导入库和静态库的区别很大，他们实质是不一样的东西。静态库本身就包含了实际执行代码、符号表等等，而对于导入库而言，其实际的执行代码位于动态库中，导入库只包含了</div><div></div><div>地址符号表等，确保程序找到对应函数的一些基本地址信息。<br /></div><div></div><div></div><div><strong>静态链接与动态链接：</strong></div><div></div><div>静态链接方法：#pragma comment(lib, "test.lib") ，静态链接的时候，载入代码就会把程序会用到的动态代码或动态代码的地址确定下来</div><div>静态库的链接可以使用静态链接，动态链接库也可以使用这种方法链接导入库</div><div></div><div>动态链接方法：LoadLibrary()/GetProcessAddress()和FreeLibrary()，使用这种方式的程序并不在一开始就完成动态链接，而是直到真正调用动态库代码时，载入程序才计算(被调用的那部分)动态代码的逻辑地址，然后等到某个时候，程序又需要调用另外某块动态代码时，载入程序又去计算这部分代码的逻辑地址，所以，这种方式使程序初始化时间较短，但运行期间的性能比不上静态链接的程序。</div><div></div><div>在软件开发的过程中，大家经常会或多或少的使用别人编写的或者系统提供的动态库或静态库，但是究竟是使用静态库还是动态库呢？他们的适用条件是什么呢？</div><div>&nbsp;</div><div>简单的说，静态库和应用程序编译在一起，在任何情况下都能运行，而动态库是动态链接，顾名思义就是在应用程序启动的时候才会链接，所以，当用户的系统上没有该动态库时，应用程序就会运行失败。再看它们的特点：</div><div>动态库：</div><div>1.共享：多个应用程序可以使用同一个动态库，启动多个应用程序的时候，只需要将动态库加载到内存一次即可；</div><div>2.开发模块好：要求设计者对功能划分的比较好。</div><div>&nbsp;</div><div>静态库：代码的装载速度快，执行速度也比较快，因为编译时它只会把你需要的那部分链接进去，应用程序相对比较大。但是如果多个应用程序使用的话，会被装载多次，浪费内存。</div><div>&nbsp;</div><div>总上，我个人认为，如果你的系统上有多个应用程序都使用该库的话，就把它编译成<strong>动态库</strong>，这样虽然刚启动的时候加载比较慢，但是多任务的时候会比较节省内存；如果你的系统上只有一到两个应用使用该库，并且使用的API比较少的话，就编译成静态库吧，一般的静态库还可以进行裁剪编译，这样应用程序可能会比较大，但是启动的速度会大大提高。</div><div>&nbsp;</div><div>呵呵，个人的一些心得，不足之处，欢迎指出！<br />转自：<a href="http://www.cnblogs.com/kex1n/archive/2011/09/06/2168435.html">http://www.cnblogs.com/kex1n/archive/2011/09/06/2168435.html<br /><br /></a></div><img src ="http://www.cppblog.com/luqingfei/aggbug/201792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2013-07-14 15:11 <a href="http://www.cppblog.com/luqingfei/archive/2013/07/14/201792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>智能指针auto_ptr运用实例：常数型智能指针的特性</title><link>http://www.cppblog.com/luqingfei/archive/2011/01/04/137954.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Tue, 04 Jan 2011 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2011/01/04/137954.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/137954.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2011/01/04/137954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/137954.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/137954.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">展示const&nbsp;auto_ptr的特性</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">memory</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><br></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;define&nbsp;output&nbsp;operator&nbsp;for&nbsp;auto_ptr<br>*&nbsp;&nbsp;print&nbsp;object&nbsp;value&nbsp;or&nbsp;NULL<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;(ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;strm,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;auto_ptr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;p)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;does&nbsp;p&nbsp;own&nbsp;an&nbsp;object&nbsp;?&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(p.</span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000">()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strm&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">NULL</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;NO:&nbsp;print&nbsp;NULL</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strm&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;YES:&nbsp;print&nbsp;the&nbsp;object</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;strm;<br>}<br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;auto_ptr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;p(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">42</span><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;auto_ptr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;q(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;auto_ptr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;r;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">after&nbsp;initialization:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;p:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;p&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;q:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;q&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;r:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;r&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">q&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">*r&nbsp;=&nbsp;*p;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;ERROR:&nbsp;undefined&nbsp;behavior&nbsp;对于一个&#8220;未指向任何对象&#8221;的auto_ptr进行提领（dereference）操作，C++标准规格，<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这会导致未定义行为，比较如说导致程序的崩溃。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">77</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">after&nbsp;assigning&nbsp;values:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;p:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;p&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;q:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;q&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;r:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;r&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">q&nbsp;=&nbsp;p;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;ERROR&nbsp;at&nbsp;compile&nbsp;time<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">r&nbsp;=&nbsp;p;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;ERROR&nbsp;at&nbsp;compile&nbsp;time</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}</span></div>
<br>输出结果：<br>after initialization:<br>&nbsp;p: 42<br>&nbsp;q: 0<br>&nbsp;r: NULL<br>after assigning values:<br>&nbsp;p: -77<br>&nbsp;q: 42<br>&nbsp;r: NULL<br>请按任意键继续. . .<br>
<img src ="http://www.cppblog.com/luqingfei/aggbug/137954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2011-01-04 15:29 <a href="http://www.cppblog.com/luqingfei/archive/2011/01/04/137954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>智能指针auto_ptr运用实例：移转拥有权的行为</title><link>http://www.cppblog.com/luqingfei/archive/2011/01/04/137951.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Tue, 04 Jan 2011 06:29:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2011/01/04/137951.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/137951.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2011/01/04/137951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/137951.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/137951.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">memory</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><br></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;define&nbsp;output&nbsp;operator&nbsp;for&nbsp;auto_ptr<br>*&nbsp;&nbsp;print&nbsp;object&nbsp;value&nbsp;or&nbsp;NULL<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br><br>template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;(ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;strm,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;auto_ptr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;p)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;does&nbsp;p&nbsp;own&nbsp;an&nbsp;object&nbsp;?</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(p.</span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000">()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strm&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">NULL</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;NO:print&nbsp;NULL</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strm&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;YES:print&nbsp;the&nbsp;object</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;strm;<br>}<br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;auto_ptr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;p(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">42</span><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;auto_ptr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;q;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">after&nbsp;initialization:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;p:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;p&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;q:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;q&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;p;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">after&nbsp;assigning&nbsp;auto&nbsp;pointers:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;p:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;p&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;q:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;q&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">q&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;change&nbsp;value&nbsp;of&nbsp;the&nbsp;object&nbsp;q&nbsp;owns</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;q;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">after&nbsp;change&nbsp;and&nbsp;reassingnment:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;p:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;p&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;q:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;q&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}<br><br></span></div>
<p><br>输出结果：<br>after initialization:<br>&nbsp;p: 42<br>&nbsp;q: NULL<br>after assigning auto pointers:<br>&nbsp;p: NULL<br>&nbsp;q: 42<br>after change and reassingnment:<br>&nbsp;p: 55<br>&nbsp;q: NULL<br>请按任意键继续. . .</p>
<p><br><br><br>&nbsp;</p>
<img src ="http://www.cppblog.com/luqingfei/aggbug/137951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2011-01-04 14:29 <a href="http://www.cppblog.com/luqingfei/archive/2011/01/04/137951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++入门经典：(一)基本概念</title><link>http://www.cppblog.com/luqingfei/archive/2010/10/18/130226.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Mon, 18 Oct 2010 01:32:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2010/10/18/130226.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/130226.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2010/10/18/130226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/130226.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/130226.html</trackback:ping><description><![CDATA[<p>基本概念</p>
<p>编程语言</p>
<p>除了C++之外，还有Java、BASIC、COBOL、FORTRAN、PASCAL和C（只是因为它是B语言的后续语言）等编程语言。<br>所有这些称为高级语言，因为它们可以比较容易地表达出要计算机完成的工作，而且不针对某台计算机。<br>高级语言中的每个源语句一般映射为几个内部机器指令。<br>低级语言比较接近内部机器指令，通常称为汇编语言，一个汇编语言专门用于一种硬件设计，一般一个汇编指令映射为一个内部机器指令。</p>
<p>编程语言简史<br>FORTRAN是第一种开发出来的高级语言，第一个FORTRAN编译器是在19世纪50年代后期开发出来的。<br>已有40多年的历史了，目前仍广泛应用于科学和工程计算中，但C++和其他语言也逐渐进入这些领域。</p>
<p>COBOL语言专门用于商务数据处理应用程序，它的历史几乎与FORTRAN语言一样长，目前几乎不用COBOL编写代码。</p>
<p>BASIC在19世纪70年代诞生，那时已经有了个人计算机的概念。有趣的是，Microsoft销售的第一个产品是一个BASIC解释程序。<br>这种语言所固有的易用性使之很快普及，直到今天仍非常流行。</p>
<p>Java是在19世纪90年代开发的，它最初开发为Oak语言，用于给小型电子设备编程。<br>1995年，Oak演变为Java语言，可以在Web页面中内嵌代码，从那时起直到现在，这已经成为Java的主要用途。<br>Java成功的主要原因是它的可移植性。Java程序可以在任何支持它的硬件平台上运行，而且不需要任何修改。<br>Java语言的语法有许多特性，使它看起来很像C++，但有很大的区别。Java在可移植性方面比C++好，但执行性能比不上C++。</p>
<p>C在上个世纪70年代被开发为一种高级语言，用于低级编程，例如实现操作系统。大多数Unix操作系统就是用C编写的。</p>
<p><br>C++是19世纪80年代早期开发的，是一种基于C的面向对象语言。<br>顾名思义，C++表示C的累加。<br>由于C++基于C，所以这两种语言有许多共同的语法和功能，C中所有低级编程的功能都在C++中保留下来。<br>但是，C++比其前身丰富得多，用途也广泛得多。<br>C++对内存管理功能进行了非常大的改进，C++还具有面向对象的功能，所以C在功能上只是C++的一个很小的子集。<br>C++在适用范围、性能和功能上也是无可匹敌的。<br>因此，目前大多数高性能的应用程序和系统仍使用C++编写。</p>
<p><br>解释性程序和编译性程序的执行过程<br>无论使用哪种编程语言，编写出来的程序都是由各个指令或源语句构成的，它们描述了希望计算机执行的动作。<br>这些指令或源语句统称为源代码，存储在磁盘的源文件中。<br>任何规模的C++程序都是由若干个源文件组成的。</p>
<p>编程语言的目的是，与计算机可以执行的程序相比，能够更简单地描述希望计算机执行的动作。<br>计算机只能执行包含机器指令（也称为机器代码）的程序，不能直接执行我们编写的程序。</p>
<p>用前面提到的语言编写的程序基本上有两种执行方式，在大多数情况下，一种语言会选择其中一种执行方式。<br>例如，用BASIC语言编写的程序通常是解释性的，<br>也就是说，另一个称为解释器的程序会检查BASIC源代码，确定该程序要做什么，再让计算机完成这些动作。</p>
<p>而C++是一种编译语言。在执行C++程序之前，必须用另一个程序（即编译器）把它转换为机器语言。<br>编译器会检查并分析C++程序，并生成机器指令，以执行源代码指定的动作。<br>当然，解释和编译都不像这里描述的那样简单，但其工作原理就是这样。</p>
<p>使用解释性语言，执行过程是间接的，也就是说，每次执行程序时，都需要确定源代码的意图。<br>因此，这种语言比编译语言的对应程序的执行速度慢得多，有时要慢100倍。<br>其优点是在运行之前，不必等待程序的编译。<br>使用解释性语言，一旦输入代码，就可以立刻执行程序。</p>
<p>任何一种语言要么是解释性，要么是编译性的，这通常是由该语言的设计和用途来决定。<br>前面说过BASIC是一种解释性语言，但这不是绝对的，目前有许多BASIC语言的编译器。</p>
<p>没有所谓&#8220;最好&#8221;的语言，因为这取决于环境。<br>看具体环境在意的是开发速度，还是运行速度，又或是移植能力等等。</p>
<p><br>库<br>每次编写程序时，如果总是要从头开始编写，就相当繁琐。<br>为了解决这个问题，编程语言通常提供了大量预先编写好的代码，以执行标准的操作，这样就不必重新编写这些代码了。<br>可用于任意程序的标准代码都保存在一个库中。<br>编程语言附带的库跟语言本身一样重要，因为库的质量和使用范围对完成某一编程任务所需的时间有非常大的影响。</p>
<p>C++是一种功能强大的语言</p>
<p>C++的ANSI/ISO标准</p>
<p><br>名称<br>C++程序中的许多元素都有用来表示它们的名称，也称为标识符。<br>在C++程序中，可以命名的5种元素是：<br>函数、变量、类型、标签、命名空间</p>
<p><br>关键字<br>C++中有一些保留字，称为关键字，它们在C++语言中有特殊的含义。</p>
<p><br>C++语句和语句块<br>语句是指定程序做什么和程序所处理的数据元素的基本单元。</p>
<p>把名称引入源文件的语句称为声明。<br>声明只是引入名称，指定该名称表示什么，它与定义不同。</p>
<p>定义是分配一些内存，来包含名称所指代的内容。<br>大多数声明也是定义??????????(这句如何理解？？)</p>
<p><br>变量是内存中一个可以存储数据项的空间。<br>下面的语句示例声明了一个变量名，定义并初始化了一个变量：<br>double result = 0.0;<br>这个语句把名称result声明为一个double类型的变量（声明），<br>把内存分配给该变量（定义），<br>并设置其初始值为0.0（初始化）。</p>
<p>可以把几个语句放在一对花括号中，此时这些语句就称为语句块。<br>函数体就是一个语句块。<br>语句块也称为复合语句，因为在许多情况下，语句块可以看做是一个语句。</p>
<p>在C++中，在可以放置一个语句的任何地方，都可以放置一个包含在花括号对中的语句块。</p>
<p>语句块可以放在其他语句块内部，这个概念称为嵌套。语句块可以嵌套任意级。</p>
<p>语句块对用于存储数据项的变量有重要的作用。（变量作用域?）</p>
<p>代码的显示样式<br>注意使用制表符、空格缩进程序语句，显示出这些语句的逻辑；再以一致的方式使用定义程序块的匹配花括号，使块之间的关系更清晰。</p>
<p>程序结构<br>每个C++程序都由一个或多个文件组成。<br>根据约定，用于存储源代码的文件有两类：头文件和源文件。<br>头文件可以包含描述程序所需的数据类型的代码，以及其他类型的声明。<br>头文件通常用文件扩展名.h来区分，但这不是强制的。<br>源文件的扩展名是.cpp，它包含了函数声明，即程序的可执行代码。这些代码通常引用在自己的头文件中定义的数据类型的声明或定义。</p>
<p>编译器在编译代码时，需要知道这些声明或定义，因此应在文件的开头通过#include指令指定.cpp文件中需要的.h文件。<br>#include指令是编译器的一个指令，它可以把指定头文件的内容插入代码，还需要为代码需要的标准库头文件添加#include指令。</p>
<p>编译器提供了大量的标准头文件，其中包含使用标准库功能所需要的声明。<br>实际上，C++的标准头文件名都没有扩展名，这就把它们与其他头文件区分开来。</p>
<p>程序的函数和执行<br>C++程序至少包含一个函数main()，但程序一般还包含许多其他函数，一些是自己编写的，另一些是标准库函数。<br>执行一个函数称为调用函数。在调用函数时，可以给它传送数据项。<br>在函数执行完后，执行控制返回到调用函数的地方。<br>函数在执行完毕时，还可以把一个值返回到调用的位置上。<br>返回值可以存储起来，以备以后使用，也可以参与某种类型的计算，例如算术表达式的计算。</p>
<p><br>从源文件中创建可执行文件<br>从C++源代码中创建可以执行的程序模块需要两步：<br>第一步是编译器把每个.cpp文件转换为对象文件，其中包含了与源文件内容对应的机器码。<br>第二步是链接程序把编译器生成的对象文件合并到包含完整可执行程序的文件中。</p>
<p>编译器把每个源文件看作一个独立的实体，为每个.cpp文件生成一个对象文件。<br>然后在链接步骤中，把程序的对象文件和必要的库函数组合到一个可执行文件中。</p>
<p>实际上，编译是一个迭代的过程，编写源码，编译，发现错误，修改源码，再编译，发现错误，再修改，再编译，&#8230;&#8230;</p>
<p><br>编译<br>源文件的编译过程包含两个主要阶段，而它们之间的转换是自动的。<br>第一个阶段是预处理阶段，在正式的编译阶段之前进行。<br>预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。<br>#include指令就是一个预处理指令，它把头文件的内容添加到.cpp文件中。还有其他许多预处理指令。</p>
<p>这个在编译之前修改源文件的方式提供了很大的灵活性，以适应不同的计算机和操作系统环境。<br>一个环境需要的代码跟另一个环境所需的代码可能有所不同，因为可用的硬件或操作系统是不同的。<br>在许多情况下，可以把用于不同环境的代码放在同一个文件中，再在预处理阶段修改代码，使之适应当前的环境。</p>
<p>预处理器一般不能独立于编译器来执行，调用编译器会自动执行预处理过程，之后才编译代码。</p>
<p><br>链接<br>编译器为给定源文件输出的是机器码，执行这个过程需要较长时间。<br>在对象文件之间并没有建立任何连接。<br>对应于某个源文件的对象文件包含在其他源文件中的定义的函数引用或其他指定项的引用，而这些函数或项仍没有被解析。<br>同样，也没有建立同库函数的链接。<br>实际上，这些函数的代码并不是文件的一部分。<br>这些工作是由链接程序完成的。</p>
<p><br>链接程序把所有对象文件中的机器码组合在一起，<br>并解析它们之间的交叉引用。<br>它还集成了对象模块所使用的库函数的代码。<br>这是链接程序的一种简化表示，因为这里假定在可执行模块中，模块之间的所有链接都是静态建立的。<br>实际上有些链接是动态的，即这些链接是在程序执行时建立的。</p>
<p>链接程序静态地建立函数之间的链接，即在程序执行之前建立组成程序的源文件中所包含的函数链接。<br>动态建立的函数之间的链接（在程序执行过程中建立的链接）将函数编译并链接起来，创建另一种可执行模块——动态链接库或共享库。<br>动态链接库中的函数链接是程序调用函数时才建立的，在程序调用之前，该链接是不存在的。</p>
<p><br>动态链接库优点：<br>动态链接库中的函数可以在几个并行执行的程序之间共享，在执行的多个函数需要动态链接库中的函数所提供的服务时，这将节省同一个函数占用的内存空间。<br>动态链接库在调用其中的函数之前是不会加载到内存中的，也就是说，如果不使用给定动态链接库中的函数，该动态链接库就不会占用内存空间。</p>
<p>动态链接库是与操作系统紧密相关的一个系统功能。</p>
<p>C++源字符<br>编写C++语句要使用基本源字符集，这些是在C++源文件中可以显式使用的字符集。<br>包括：大小写字母，数字，控制字符，一些特殊字符。</p>
<p>在C++中使用的字符定义并没有说明字符的编码方式。编译器将决定用于编写C++源代码的字符在计算机上如何表示。</p>
<p><br>通用字符集（Universal Character Set, UCS）。<br>由UCS标准定义的字符编码与Unicode定义的编码相同。</p>
<p><br>三字符序列<br>就是用于表示另一个字符的三个字符序列。以前为了表示键盘上没有的字符，这是必不可少的一种方法。<br>编译器会用对应的字符替代它们，再对源代码进行其他处理。</p>
<p><br>转义序列<br>通过转义序列可以把控制字符输入字符常量。转义序列是指定字符的一种间接方式，通常以一个反斜杠\开头。</p>
<p>由于反斜框表示转义序列的开始，因此把反斜杠字符输入一个字符常量的唯一方式是使用两个连续的反斜杠。</p>
<p>转义序列还提供了用键盘不支持的语言来表示字符的一种通用方式，因为可以使用十六进制（基数是16）或八进制（基数是8）数字前置一个反斜杠来指定字符的编码。</p>
<p>由于使用了数字编码，可以用这种方式指定任何字符。</p>
<p>在C++中，十六进制数据以x或X开头。</p>
<p>还可以使用至多3个八进制数字前置一个反斜杠来表示字符。例如\165。没有x或X，就表示该编码应解释为一个八进制数字。</p>
<p>cout &lt;&lt; "\n\" Least said\n\t\tsoonest mended.\ "\n\a";<br>双引号之间的字符串称为字符串字面量。<br>双引号字符表示该字符串字面量的开始和结束，它们不是字符串的一部分。</p>
<p>字符串内部的双引号不会解释为字符串字面量的结束，这是因为每个双引号的前面都有一个反斜杠，表示这是一个转义序列。</p>
<p><br>语句中的空白<br>除了在语句的元素之间或引号中的字符串内用作分隔符之外，编译器会忽略空白。<br>因此可以在代码中包含任意多个空白，使程序的可读性更高。</p>
<p>在一些编程语言中，语句的结尾是代码行的末尾，但在C++中，语句的结尾用分号表示。<br>因此，可以把一个语句分散放在好几行代码行上。</p>
<p><br>程序的注释<br>C++中注释有两种形式：单行和多行。<br>单行注释以双斜杠开头（//）。<br>编译器会忽略双斜杠后面的所有内容。</p>
<p>多行注释以/*开头，以*/结尾。在/*和*/之间的所有内容都被忽略。<br>注意多行注释不能嵌套，否则会使编译器发出错误消息。</p>
<p><br>标准库<br>标准库包含了大量的函数和其他支持实体，增加和扩展了C++的基本语言功能。<br>标准库的内容是C++的一部分，在语言的语法和语义方面跟C++相同。<br>C++的标准定义了这两者，所以每个符合该标准的编译器都提供了完整的标准库。</p>
<p>标准库的范围是很特殊的。<br>使用该标准库将获得非常多的功能，包括基本元素如基本语言支持、<br>输入输出函数和异常处理（异常是在程序执行中发生的偶然事件，常常是某种错误）、<br>实用函数，数学例程和各种预先编写好并测试通过的功能。<br>在程序执行过程中可借助这些功能来存储和管理数据。</p>
<p><br>使用标准库所需要的定义和声明位于标准头文件中。<br>C++标准库中的几乎所有内容都是在命名空间std中定义的。</p>
<p><br>用C++编程</p>
<p>过程化编程方法和面向对象编程方法</p>
<p><br>小结<br>C++程序至少包含一个main()函数。<br>函数的可执行部分由包含在一对花括号中的语句组成。<br>一对花括号定义了一个语句块。<br>在C++中，语句用分号结束。<br>关键字是C++中有特殊含义的一组保留字。程序中的实体不能与C++语言中的任何关键字同名。<br>C++程序包含在一个或多个文件中。<br>定义函数的代码通常存储在扩展名为.cpp的文件中。<br>定义数据类型的代码通常存储在扩展名为.h的头文件中。<br>C++标准库提供了支持和扩展C++语言的大量功能。<br>C++中的输入和输出是利用流来执行的，并且需要使用插入和撮运算符，即&lt;&lt;和&gt;&gt;。<br>面向对象的编程方式需要定义专门用于某程序的新数据类型。一旦定义好需要的数据类型，就可以根据这些新数据类型来编写程序。</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/luqingfei/aggbug/130226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2010-10-18 09:32 <a href="http://www.cppblog.com/luqingfei/archive/2010/10/18/130226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>make工具的用法</title><link>http://www.cppblog.com/luqingfei/archive/2010/08/30/125253.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Mon, 30 Aug 2010 02:20:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2010/08/30/125253.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/125253.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2010/08/30/125253.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/125253.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/125253.html</trackback:ping><description><![CDATA[<span>make</span><span>工具可以看成是一个智能的批处理工具，它本身并没有编译的链接的功能，同样是用类似于批处理的方式，通过调用用户指定的语句来进行编译和链接。但是，批处理会执行全部命令将全部源文件编译，包括那些不必重新编译的源文件，而</span><span>make</span><span>工具则可根据目标文件上一次编译的时间和所依赖的源文件的更新时间自动判断应当编译哪些源文件，对没有更新过的文件不会处理，这样就可以大大提高程序调试的效率。</span>
<p>&nbsp;</p>
<p><span>举例说明，我们要写一个</span><span>test.exe</span><span>文件，生成最后的可执行文件有</span><span>4</span><span>个步骤：</span></p>
<p><span>1</span><span>，编译源文件</span><span>x.cpp</span><span>，其中用到头文件</span><span>common.h</span><span>，它们经编译器编译成</span><span>x.obj</span><span>；</span></p>
<p><span>2</span><span>，编译源文件</span><span>y.cpp</span><span>，其中用到头文件</span><span>common.h</span><span>和</span><span>y.h</span><span>，它们经编译器编译成</span><span>y.obj</span><span>；</span></p>
<p><span>3</span><span>，资源脚本文件</span><span>x.rc</span><span>，经过资源编译器编译成</span><span>x.res</span><span>；</span></p>
<p><span>4</span><span>，最后用链接器将</span><span>x.obj</span><span>，</span><span>y.obj</span><span>和</span><span>x.res</span><span>链接成</span><span>test.exe</span><span>。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>可以看出，当程序调试的时候，如果修改了</span><span>x.cpp</span><span>，也就是说</span><span>x.obj</span><span>的文件时间比</span><span>x.cpp</span><span>要早，就需要重新进行步骤</span><span>1</span><span>和</span><span>4</span><span>；如果修改了</span><span>y.cpp</span><span>或</span><span>y.h</span><span>，那么需要重新执行步骤</span><span>2</span><span>和</span><span>4</span><span>；如果修改的是</span><span>x.rc</span><span>，则步骤</span><span>3</span><span>和</span><span>4</span><span>必须重新执行；如果同时修改了</span><span>common.h</span><span>和</span><span>x.rc</span><span>，那么必须重复全部步骤。在这个例子中，文件的依赖关系就是：</span></p>
<p><span>1</span><span>，</span><span>test.exe</span><span>依赖于</span><span>x.obj</span><span>，</span><span>y.obj</span><span>和</span><span>x.res</span><span>；</span></p>
<p><span>2</span><span>，</span><span>x.res</span><span>依赖于</span><span>x.rc</span><span>；</span></p>
<p><span>3</span><span>，</span><span>x.obj</span><span>依赖于</span><span>x.cpp</span><span>和</span><span>common.h</span><span>；</span></p>
<p><span>4</span><span>，</span><span>y.obj</span><span>依赖于</span><span>y.cpp</span><span>，</span><span>common.h</span><span>和</span><span>y.h</span><span>。</span></p>
<p>&nbsp;</p>
<p><span>make</span><span>可以根据文件的时间正确判断文件的新旧并执行相应的步骤。但</span><span>make</span><span>又是如何知道文件之间的依赖关系呢？这需要用户用一个描述文件来指定。这个描述文件就叫做</span><span>makefile</span><span>，执行</span><span>make</span><span>工具的时候，它会默认用</span><span>makefile</span><span>做描述文件名来进行相应的工作，书写描述文件有规定的语法，虽然语法不是很简单，但写好以后就省事多了。</span></p>
<p>&nbsp;</p>
<p><span>Microsoft</span><span>的</span><span>make</span><span>工具文件名为</span><span>nmake.exe</span><span>，</span><span>Borland</span><span>公司的</span><span>make</span><span>工具文件名是</span><span>make.exe</span><span>。</span></p>
<p><span>两者默认的描述文件名都是</span><span>makefile</span><span>，描述文件的语法也大同小异，只是使用时命令行参数有些不同。</span></p>
<p>&nbsp;</p>
<p><span>nmake</span><span>的用法</span></p>
<p><span>在命令行键入</span><span>namke/? </span><span>可以显示帮助信息，</span><span>nmake</span><span>的语法为：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>nmake [</span><span>选项</span><span>] [/f </span><span>描述文件名</span><span>] [/x </span><span>输出信息文件名</span><span>] [</span><span>宏定义</span><span>] [</span><span>目标</span><span>]</span></p>
<p>&nbsp;</p>
<p><span>说明如下：</span></p>
<p><span>/f </span><span>：如果描述文件名不使用默认的&#8220;</span><span>makefile</span><span>&#8221;，可以用</span><span>/f</span><span>参数指定。</span></p>
<p><span>/x </span><span>：如果想把屏幕输出的信息存到一个文件中，可以用</span><span>/x </span><span>参数指定。（用</span><span>DOS</span><span>下的管道操作符</span><span> nmake &gt; </span><span>文件名的方法无效）。</span></p>
<p><span>宏定义：可以用新的定义覆盖描述文件中的宏定义。</span></p>
<p><span>目标：可以指定建立描述文件中描述的某个文件，如上面的例子中默认是生成最后的</span><span>test.exe</span><span>文件，也可以用</span><span>nmake x.res</span><span>指定更新</span><span>x.res</span><span>文件。</span></p>
<p>&nbsp;</p>
<p><span>nmake</span><span>的常用选项：</span></p>
<p><span>/A<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>不检测文件更新时间，强制更新所有文件</span></p>
<p><span>/B<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>文件更新时间相等时也要更新文件</span></p>
<p><span>/D<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>make</span><span>时显示文件新旧信息</span></p>
<p><span>/N<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>显示</span><span>make</span><span>时要执行的命令，但并不真正执行</span></p>
<p><span>/P<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>一个比较有用的选择，</span><span>make</span><span>时显示详细的信息</span></p>
<p>&nbsp;</p>
<p><span>由于</span><span>nmake</span><span>的应用是基于文件时间的，当计算机的时钟不准确或文件拷贝到另一台计算机后文件时间有些偏差，那么可能文件的更新会不正确，这时最好用</span><span>/A</span><span>选项强制把所有文件更新一遍。在平时使用的时候，以</span><span>makefile</span><span>当做建立的描述文件名，那么仅键入不加参数的</span><span>nmake</span><span>命令就可以完成所有工件了。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>描述文件的语法</span></p>
<p><span>make</span><span>工具最主要也是最基本的功能就是通过描述文件来描述源程序之间的相互关系并自动维护编译工作，而描述文件需要按照某种语法进行编写，文件中需要说明如何编译各个源文件并链接生成可执行文件，并要求定义源文件之间的依赖关系，为了更方便使用，文件中同时可以用一些宏定义。描述文件一般需要包含以下内容：</span></p>
<p><span><span>l<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>注释</span></p>
<p><span><span>l<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>宏定义</span></p>
<p><span><span>l<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>显式规则</span></p>
<p><span><span>l<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>隐含规则</span></p>
<p>&nbsp;</p>
<p><span>在这里，以上面的</span><span>test.exe</span><span>的例子写出一个描述文件，再逐步介绍各部分的书写语法。为了方便使用，一般都把描述文件的文件名取为默认文件名：</span><span>makefile</span><span>（无扩展名）。这个例子的</span><span>makefile</span><span>文件如下：</span></p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">#&nbsp;nmake工具的描述文件例子<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">EXE&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Test.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#指定输出文件<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">OBJS&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;x.obj&nbsp;\<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y.obj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#需要的目标文件<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">RES&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;x.res&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#需要的资源文件<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">LINK_FLAG&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">subsystem:windows&nbsp;&nbsp;&nbsp;#链接选项<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">ML_FLAG&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">c&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">coff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#编译选项<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">#定义依赖关系和执行命令<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">$(EXE)&nbsp;:&nbsp;$(OBJS)&nbsp;$(RES)<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Link&nbsp;$(LINK_FLAG)&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">:$(EXE)&nbsp;$(OBJS)&nbsp;$(RES)<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">$(OBJS)&nbsp;:&nbsp;Common.inc<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">y.obj:&nbsp;y.inc<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">#定义汇编编译和资源编译的默认规则<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">.asm&nbsp;.obj:<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ml&nbsp;$(ML_FLAG)&nbsp;$</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">.rc&nbsp;.res:<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc&nbsp;$</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">#清除临时文件<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">clean:<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;del&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">.obj<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;del&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">.res<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000"></span></div>
<p>&nbsp;</p>
<p><span>1</span><span>、注释和换行</span></p>
<p><span>makefile</span><span>中的注释是以</span><span>#</span><span>号开头一直到行尾的字符，当</span><span>nmake</span><span>工具处理到这些字符的时候，它会完全忽略</span><span>#</span><span>号及全部注释字符。</span></p>
<p>&nbsp;</p>
<p><span>当一行的内容过长的时候，可以用换行符来继续，</span><span>makefile</span><span>的换行符是反斜杠</span><span>\</span><span>。</span></p>
<p><span>在使用换行符的时候要注意在反斜杠后面不能再加上其他字符，包括注释和空格，否则</span><span>nmake</span><span>检测到反斜杠不在一行的最后，就不会把它当成换行符解释，就会出现错误。</span></p>
<p>&nbsp;</p>
<p><span>2</span><span>、宏定义</span></p>
<p><span>makefile</span><span>中允许使用简单的宏定义指代源文件及其相关编译信息，可以把宏称为变量，在整个描述文件中，只要符合下面语法的行就是宏定义：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>变量名</span><span>=</span><span>变量内容</span></p>
<p>&nbsp;</p>
<p><span>如上面例子文件中的</span><span>2</span><span>到</span><span>8</span><span>行就是宏定义，在引用宏时只需在变量前加</span><span>$</span><span>符号，但是要注意的是，如果变量名的长度超过一个字符，在引用时就必须加圆括号</span><span>()</span><span>，下面都是有效的宏引用：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>$(LINK_FLAG)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>$(EXE)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>$A</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>$(A)</span></p>
<p><span>其中最后两个引用是完全一致的。</span></p>
<p>&nbsp;</p>
<p><span>宏定义的使用可以使</span><span>makefile</span><span>的使用更灵活：首先可以使文件便于修改，比如把第</span><span>8</span><span>行和第</span><span>18</span><span>行中</span><span>ml</span><span>的选项部分写成宏定义，以后要改变编译选项的时候，只要直接在</span><span>makefile</span><span>文件头部改变宏定义就可以了，不必重新阅读整个</span><span>makefile</span><span>文件；其次，当不止一个地方用到同一个文件的时候，把文件名定义为宏定义可以减少错误，增加可读性，同时也可以便于修改；最大的好处是可以直接在命令行中用新的定义覆盖，比如在命令行中键入：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>nmake ML_FLAG &#8211; &#8220;/c /coff /F<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="1" UnitName="&#8221;">1&#8221;</st1:chmetcnv></span></p>
<p><span>那么这时就会以新的</span><span>/c /coff /F1</span><span>定义代替</span><span>makefile</span><span>中定义的</span><span>/c /coff</span><span>，在这种使用中要注意两个问题，一是宏名称要区分大小写，</span><span>ML_FLAG</span><span>和</span><span>ml_flag</span><span>是不一样的；二是定义值中有空格的时候要用双引号引起来，没有空格时可以不用双引号，如</span><span>ML_LAG=/c</span><span>，这使临时使用不同的参数编译文件时可以不必修改</span><span>makefile</span><span>。</span></p>
<p>&nbsp;</p>
<p><span>3</span><span>、显式规则</span></p>
<p><span>makefile</span><span>中包含有一些规则，这些规则定义了文件之间的依赖关系和产生命令，一个规则的格式是这样的：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>目标文件：依赖文件；命令</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>（方法</span><span>1</span><span>）</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>或</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>目标文件：依赖文件</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>命令</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>（方法</span><span>2</span><span>）</span></p>
<p><span>在规则定义和命令行中，不能包含注释，例子中的第</span><span>11</span><span>行和</span><span>12</span><span>行把宏定义展开后就是：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Test.exe : x.obj y.obj x.res</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Link /subsystem:windows /out: Test.exe x.obj y.obj x.res</span></p>
<p><span>这里的目标文件就是</span><span>Test.exe</span><span>，它依赖于</span><span>3</span><span>个文件</span><span>x.obj</span><span>，</span><span>y.obj</span><span>和</span><span>x.res</span><span>，如果有必要，产生目标文件的命令就是下面的</span><span>Link</span><span>命令，整个规则可以用两种方法，用第二种方法的时候，命令可以从第二行开始，第二行的分号&#8220;</span><span>;</span><span>&#8221;省略，但是这时命令前面必须有一个</span><span>Tab</span><span>字符，否则</span><span>nmake</span><span>无法区分这究竟是命令还是别的定义。目标文件可以有多个，依赖文件也可以有多个，同时命令也可以由多个命令行组成，当然这时候就必须用第二种方法定义了。</span></p>
<p>&nbsp;</p>
<p><span>可以也可以用</span><span>test.exe</span><span>生成的规则定义其他文件，如</span><span>x.obj</span><span>或</span><span>x.res</span><span>的生成方法，但</span><span>nmake</span><span>如何知道哪个是最终要</span><span>make</span><span>的文件呢？实际上</span><span>nmake</span><span>默认将整个描述文件的第一条规则中目标文件认为是最终文件，如果我们把</span><span>11</span><span>，</span><span>12</span><span>行放到第</span><span>13</span><span>行后面，那</span><span>x.obj</span><span>和</span><span>y.obj</span><span>的建立规则就成了第一条规则，</span><span>nmake</span><span>建立了</span><span>x.obj</span><span>和</span><span>y.obj</span><span>之后就不理会</span><span>test.exe</span><span>的建立了，所以我们必须把最终需要生成的文件放在第一条规则定义。当然，在</span><span>nmake</span><span>的命令行参数中可以指定要</span><span>make</span><span>的目标，如我们要生成</span><span>x.res</span><span>文件，那么不必修改</span><span>makefile</span><span>将</span><span>x.res</span><span>的描述规则移动到最前面，而是直接在命令行键入以下命令即可：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>nmake x.res</span></p>
<p>&nbsp;</p>
<p><span>参数中也可以同时带好几个目标文件名，</span><span>nmake</span><span>会一一处理，如果指定的目标文件没有对应的规则，</span><span>nmake</span><span>会返回一个出错信息：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>fatal error U1073: don&#8217;t know how to make &#8216;xxx </span><span>文件</span><span>&#8217;</span></p>
<p>&nbsp;</p>
<p><span>当用户要求</span><span>nmake</span><span>去建造一个目标时，</span><span>make</span><span>会去找到这个目标的依赖规则，这时第二行中的命令并不会立刻就执行，而是首先要做一些事情：</span><span>nmake</span><span>先去检查依赖文件是否是另一条规则的目标文件，如果是则先处理这一条规则，否则不是，</span><span>nmake</span><span>再检查各个依赖文件的时间，看这些文件有没有比目标文件更新的，如果没有，</span><span>nmake</span><span>会决定不再重新建造目标文件，并给出提示：&#8220;</span><span>xxx </span><span>文件&#8221;</span><span>is up-to-date</span><span>，如果依赖文件有比目标文件更新的，才执行命令。</span></p>
<p>&nbsp;</p>
<p><span>所以一个顺序下来，所有的目标文件以及它们的依赖文件，以信依赖文件的依赖文件都会被检查并更新，总而言之，一个目标文件的建立包含了顺序正确的指令链接，这个链接结构是树状的，目标文件是根，一级级扩展到多个文件，我们要求的是</span><span>nmake</span><span>去建立链接中处于根部的那个文件，</span><span>nmake</span><span>要根据链接结构从目标开始向初始状态前进，最后慢慢回来，在这个过程中执行建立每个文件所必须的命令，一直到最终目标建立完成。</span></p>
<p>&nbsp;</p>
<p><span>目标也可以没有依赖文件，而目标也可以不是一个真正存在的文件，如例子第</span><span>23</span><span>行到第</span><span>25</span><span>行行中的</span><span>clean</span><span>是一个目标，但我们并不是要生成一个</span><span>clean</span><span>文件，而是希望在文件调试完毕后用</span><span>nmake</span><span>来清除临时文件<strong>，当我们键入</strong></span><strong><span>nmake clean</span></strong><strong><span>的时候，工作目录下并没有</span><span>clean</span></strong><strong><span>这个文件，那么</span><span>nmake</span></strong><strong><span>就会去执行</span><span>clean</span></strong><strong><span>定义中的命令，因为</span><span>nmake</span></strong><strong><span>把每一个不存在的目标当做是一个过时的目标，如此一来，就会删除中间过程中的文件</span><span>*.obj</span></strong><strong><span>和</span><span>*.res</span></strong><strong><span>。</span></strong></p>
<p>&nbsp;</p>
<p><span>指出了目标文件全名的规则称为<strong>显式规则</strong>，但有些类别的文件的编译方法可以是雷同的，如从</span><span>asm</span><span>文件产生</span><span>obj</span><span>文件的命令总是用</span><span>ml</span><span>，从</span><span>rc</span><span>文件产生</span><span>res</span><span>文件的命令总是用</span><span>rc</span><span>，对于每个文件都写一条规则有些多余，这时候就要用到隐含规则。</span></p>
<p>&nbsp;</p>
<p><span>4</span><span>、隐含规则</span></p>
<p><span>隐含规则可以为某一类的文件指定建立的命令，它具体定义了如何将带一个特定扩展名的文件转换成具有另一种扩展名的文件，定义的格式是：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.</span><span>源扩展名</span><span> .</span><span>目标扩展名</span> <span>：</span> <span>；命令</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>（方法</span><span>1</span><span>）</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>或</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.</span><span>源扩展名</span><span> .</span><span>目标扩展名</span> <span>：</span><span> </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>命令</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>（方法</span><span>2</span><span>）</span></p>
<p>&nbsp;</p>
<p><span>隐含规则的语法和显式规则相似，也是用&#8220;：&#8221;隔开，在分号&#8220;；&#8221;后面书写命令，也可以不用分号&#8220;；&#8221;而将命令写在第二行，同理，这时命令之前要加一个</span><span>Tab</span><span>字符。</span></p>
<p>&nbsp;</p>
<p><span>隐含规则不能有依赖文件，所以冒号&#8220;：&#8221;后面没有内容，例子中的第</span><span>17</span><span>、</span><span>18</span><span>行定义了从</span><span>asm</span><span>文件建立</span><span>obj</span><span>文件的隐含规则，第</span><span>19</span><span>和</span><span>20</span><span>行定义了从</span><span>rc</span><span>文件建立</span><span>res</span><span>文件的隐含规则，隐含规则中无法指定确定的输入文件名，因为输入文件名是泛指的有相同扩展名的一整类文件，这时候就要用到几个特殊的内定宏来指定文件名，这些宏是</span><span>$@</span><span>，</span><span>$*</span><span>，</span><span>$?</span><span>和</span><span>$&lt;</span><span>，它们的含义如下：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>$@<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>全路径的目标文件。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>$*<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>除去扩展名的全路径的目标文件。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>$?<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>所有源文件名。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>$&lt;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>源文件名（只能用在隐含规则中）。</span></p>
<p><span>所以第</span><span>19</span><span>、</span><span>20</span><span>行中的</span><span>rc $&lt;</span><span>用于</span><span>x.rc</span><span>的时候就是</span><span>rc x.rc</span><span>。</span></p>
<p>&nbsp;</p>
<p><span>读者可能注意到一些显式规则没有命令行，如第</span><span>13</span><span>行的</span><span>$(OBJS): Common.inc</span><span>指出了所有的</span><span>obj</span><span>文件全部依赖于</span><span>Common.inc</span><span>文件，第</span><span>14</span><span>行的</span><span> y.obj:y.inc</span><span>则指出了</span><span>y.obj</span><span>同时也依赖于</span><span>y.inc</span><span>和第</span><span>13</span><span>行的规则合并，</span><span>y.obj</span><span>依赖于</span><span>Common.inc</span><span>也依赖于</span><span>y.inc</span><span>，但是这两个条规则都没有指出产生这些</span><span>obj</span><span>文件的命令，所以</span><span>nmake</span><span>处理的时候会到隐含规则中去找命令行，最后会用第</span><span>18</span><span>行的</span><span>ml $(ML_FLAG) $&lt;</span><span>命令去产生这些</span><span>obj</span><span>文件。</span></p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/luqingfei/aggbug/125253.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2010-08-30 10:20 <a href="http://www.cppblog.com/luqingfei/archive/2010/08/30/125253.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是Makefile</title><link>http://www.cppblog.com/luqingfei/archive/2010/08/27/124946.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Fri, 27 Aug 2010 07:45:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2010/08/27/124946.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/124946.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2010/08/27/124946.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/124946.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/124946.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>什么是</span><span>makefile</span><span>？或许很多</span><span>Windows</span><span>的程序员都不知道这个东西，因为那些</span><span>Windows</span><span>的</span><span>IDE</span><span>都为你做了这个功作，但是作为一个好的和专业的程序员，</span><span>makefile</span><span>还是要懂的。这就好像现在有许多的所见即所得的网页制作工具，但如果你想成为一个专业网页开发人员，你还是要了解</span><span>HTML</span><span>的标识的含义的，当然还有其它的比如</span><span>CSS</span><span>，</span><span>JavaScript</span><span>等等等等。</span></p>
<p>&nbsp;</p>
<p><span>makefile</span><span>关系到整个工程的编译规则。一个工程中的源文件不计数，其按类型、功能、模块分别放在若干个目录中，</span><span>makefile</span><span>定义了一系列的规则来指定，哪些文件需要先编译，哪些文件需要后编译，哪些文件需要重新编译，甚至于进行更复杂的功能操作，因为</span><span>makefile</span><span>就像一个</span><span>Shell</span><span>脚本一样，其中也可以执行操作系统的命令。</span></p>
<p>&nbsp;</p>
<p><span>makefile</span><span>带来的好处就是——自动化编译，一旦写好，只需要一个</span><span>make</span><span>命令，整个工程完全自动编译，极大的提高了软件开发的效率。</span><span>make</span><span>是一个命令工具，是一个解释</span><span>makefile</span><span>中指令的命令工具，一般来说，大多数的</span><span>IDE</span><span>都有这个命令，比如：</span><span>Delphi</span><span>的</span><span>make</span><span>，</span><span>Visual C++</span><span>的</span><span>nmake</span><span>，</span><span>Linux</span><span>下</span><span>GNU</span><span>的</span><span>make</span><span>。可见，</span><span>makefile</span><span>都成为了一种在工程方面的编译方法。</span></p>
<p>&nbsp;</p>
<p><span>不同产商的</span><span>make</span><span>各不相同，也有不同的语法，但其本质都是在&#8220;文件依赖性&#8221;上做文章。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>关于程序的编译和连接</span></p>
<p><span>在此，先说说关于程序编译的一些规范和方法，一般来说，无论是</span><span>C</span><span>、</span><span>C++</span><span>，还是</span><span>pas</span><span>，首先要把源文件编译成中间的代码文件，在</span><span>Windows</span><span>下也就是</span><span>.obj</span><span>文件，</span><span>UNIX</span><span>下是</span><span>.o</span><span>文件，即</span><span>Object File</span><span>，这个动作叫做编译（</span><span>compile</span><span>）。然后再把大量的</span><span>Object File</span><span>合成执行文件，这个动作叫做链接（</span><span>link</span><span>）。</span></p>
<p>&nbsp;</p>
<p><span>编译时，编译器需要的是语法的正确，函数与变量的声明的正确。对于后者，通常是你需要告诉编译器头文件的所在位置（头文件中应该只是声明，而定义应该放在</span><span>C/C++</span><span>文件中），只要所有的语法正确，编译器就可以编译出中间目标文件。一般来说，每个源文件都应该对应于一个中间目标文件（</span><span>O</span><span>文件或是</span><span>OBJ</span><span>文件）。</span></p>
<p>&nbsp;</p>
<p><span>链接时，主要是链接函数和全局变量，所以，我们可以使用这些中间目标文件（</span><span>O</span><span>文件或是</span><span>OBJ</span><span>文件）来链接我们的应用程序。链接器并不管函数所在的源文件，只管函数的中间目标文件（</span><span>Object File</span><span>），在大多数的时候，由于源文件太多，编译生成的中间目标文件太多，而在链接时需要明显地指出中间目标文件名，这对于编译很不方便，所以，我们要给中间目标文件打个包，在</span><span>Windows</span><span>下这种包叫&#8220;库文件&#8221;（</span><span>Library File</span><span>），也就是</span><span>.lib</span><span>文件，在</span><span>UNIX</span><span>下，是</span><span>Archive File</span><span>，也就是</span><span>.a</span><span>文件。</span></p>
<p>&nbsp;</p>
<p><span>总结一下，源文件首先会生成中间目标文件，再由中间目标文件生成执行文件。在编译时，编译器只检测程序语法，和函数、变量是否被声明。如果函数未被声明，编译器会给出一个警告，但可以生成</span><span>Object File</span><span>。而在链接程序时，链接器会在所有的</span><span>Object File</span><span>中找寻函数的实现，如果找不到，那到就会报链接错误码（</span><span>Linker Error</span><span>）。在</span><span>VC</span><span>下，这种错误一般是：</span><span>Link 2001</span><span>错误，意思就是说，链接器未能找到函数的实现。你需要指定函数的</span><span>Object File</span><span>。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>言归正传。</span></p>
<p>&nbsp;</p>
<p><span>Makefile</span><span>介绍</span></p>
<p><span>make</span><span>命令执行时，需要一个</span><span>Makefile</span><span>文件，以告诉</span><span>make</span><span>命令要怎么样的去编译和链接程序。</span></p>
<p>&nbsp;</p>
<p><span>Makefile</span><span>规则：</span></p>
<p><span>规则包含两个部分，一个是依赖关系，一个是生成目标的方法。</span></p>
<p>&nbsp;</p>
<p><strong><span>target &#8230; : prerequisites&#8230;</span></strong></p>
<p><strong><span>command</span></strong></p>
<p><span>&#8230;</span></p>
<p><span>&#8230;</span></p>
<p><span>目标：先决条件</span></p>
<p><span>命令</span></p>
<p>&nbsp;</p>
<p><span>target</span><span>也就是一个目标文件，可以是</span><span>Object File</span><span>，也可以是执行文件。还可以是一个标签（</span><span>Label</span><span>）。</span></p>
<p><span>prerequisites </span><span>就是，要生成那个</span><span>target</span><span>所需要的文件或目标。</span></p>
<p><span>command </span><span>也就是</span><span>make</span><span>需要执行的命令。（任意的</span><span>Shell</span><span>命令）</span></p>
<p>&nbsp;</p>
<p><span>这是一个文件的依赖文件，也就是说，</span><span>target</span><span>这一个或多个的目标文件依赖于</span><span>prerequisites</span><span>中的文件，其生成规则定义在</span><span>command</span><span>中。说白一点就是说，</span><span>prerequisites</span><span>中如果有一个以上的文件比</span><span>target</span><span>文件要新的话，</span><span>command</span><span>所定义的命令就会被执行。这就是</span><span>Makefile</span><span>的规则。也就是</span><span>Makefile</span><span>中最核心的内容。</span></p>
<p>&nbsp;</p>
<p><span>在</span><span>Makefile</span><span>中，规则的顺序是很重要的，因为，</span><span>Makefile</span><span>中只应该有一个最终目标，其它的目标都是被这个目标所连带出来的，所以一定要让</span><span>make</span><span>知道你的最终目标是什么。一般来说，定义在</span><span>Makefile</span><span>中的目标可能会有很多，但是第一条规则中的目标将被确立为最终的目标。如果第一条规则中的目标有很多个，那么，第一个目标会成为最终的目标。</span><span>make</span><span>所完成的也就是这个目标。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>一个示例：一个工程只包含两个文件，一个汇编源码文件</span><span>*.asm</span><span>，一个资源文件</span><span>.rc</span><span>。注：这是我学习</span><span>Win32</span><span>汇编程序如果定义菜单的例子。</span></p>
<p><span>NAME = Menu</span></p>
<p><span>OBJS = $(NAME).obj</span></p>
<p><span>RES&nbsp;= $(NAME).res</span></p>
<p>&nbsp;</p>
<p><span>LINK_FLAG = /subsystem:windows</span></p>
<p><span>ML_FLAG = /c /coff</span></p>
<p>&nbsp;</p>
<p><span>$(NAME).exe: $(OBJS) $(RES)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Link $(LINK_FLAG) $(OBJS) $(RES)</span></p>
<p>&nbsp;</p>
<p><span>.asm.obj:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ml $(ML_FLAG) $&lt;</span></p>
<p><span>.rc.res:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>rc $&lt;</span></p>
<p>&nbsp;</p>
<p><span>clean:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><st1:state w:st="on"><st1:place w:st="on">del</st1:place></st1:state> *.obj</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><st1:state w:st="on"><st1:place w:st="on">del</st1:place></st1:state> *.res</span></p>
<p>&nbsp;</p>
<p><span>make</span><span>是如何工作的</span></p>
<p><span>在默认的方式下，也就是我们只键入</span><span>make</span><span>命令。那么，</span></p>
<p><span>1</span><span>，</span><span>make</span><span>会在当前目录下找名称为&#8220;</span><span>Makefile</span><span>&#8221;或&#8220;</span><span>makefile</span><span>&#8221;的文件。</span></p>
<p><span>2</span><span>，如果找到，它会找文件中的每一个目标文件（</span><span>target</span><span>），并把这个文件作为最终的目标文件。比如是</span><span>XXX</span><span>，一般它是一个可执行文件。</span></p>
<p><span>3</span><span>，如果这个</span><span>XXX</span><span>文件不存在，或是</span><span>XXX</span><span>所依赖的后面的文件</span><span>YYY</span><span>的修改时间要比</span><span>XXX</span><span>这个文件新，那么，他就会执行后面所定义的命令来生成</span><span>XXX</span><span>这个文件。</span></p>
<p><span>4</span><span>，如果</span><span>XXX</span><span>所依赖的</span><span>YYY</span><span>文件存在，那么</span><span>make</span><span>会在当前文件中找目标为</span><span>YYY</span><span>文件的依赖性，如果找到则再根据那一个规则生成</span><span>YYY</span><span>文件。</span></p>
<p><span>5</span><span>，当然，你的</span><span>C</span><span>文件和</span><span>H</span><span>文件都是存在的，于是</span><span>make</span><span>会生成</span><span>YYY</span><span>文件，然后再用</span><span>YYY</span><span>文件生成</span><span>make</span><span>的终极任务，也就是执行文件</span><span>XXX</span><span>了。</span></p>
<p>&nbsp;</p>
<p><span>这就是整个</span><span>make</span><span>的依赖性，</span><span>make</span><span>会一层又一层地去找文件的依赖关系，直到最终编译出第一个目标文件。在找寻的过程中，如果出现错误，比如最后被依赖的文件找不到，那么</span><span>make</span><span>就会直接退出，并报错，而对于所定义的命令的错误，或是编译不成功，</span><span>make</span><span>根本不理。</span><span>make</span><span>只管文件的依赖性，即，如果在我找到了依赖关系之后，冒号后面的文件还是不在，那么对不起，我就不工作啦。</span></p>
<p>&nbsp;</p>
<p><span>通过上述分析，我们知道，像</span><span>clean</span><span>这种，没有被第一个目标文件直接或间接关联，那么它后面所定义的命令将不会被自动执行，不过，我们可以显式让</span><span>make</span><span>执行。即命令——&#8220;</span><span>make clean</span><span>&#8221;，以此来清除所有的目标文件，以便重编译。</span></p>
<p>&nbsp;</p>
<p><span>于是在我们编程中，如果这个工程已经被编译过了，当我们修改了其中一个源文件，比如</span><span>file.c</span><span>，那么根据我们的依赖性，我们的目标</span><span>file.obj</span><span>会被重编译（也就是在这个依赖性关系后面所定义的命令），于是</span><span>file.obj</span><span>的文件也是最新的啦，于</span><span>file.obj</span><span>的文件修改时间要比最终的可执行文件</span><span>XXX</span><span>要新，所以</span><span>XXX</span><span>也会被重新链接了。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>makefile</span><span>中使用变量</span></p>
<p><span>为了</span><span>makefile</span><span>的易维护，在</span><span>makefile</span><span>中我们可以使用变量。</span></p>
<p><span>makefile</span><span>的变量也就是一个字符串，理解成</span><span>C</span><span>语言的宏可能会更好一些。</span></p>
<p><span>比如，我们声明一个变量，叫</span><span>OBJS.</span></p>
<p><span>在</span><span>makefile</span><span>一开始就这样定义：</span></p>
<p><span>OBJS = 1.obj 2.obj 3.obj</span></p>
<p><span>于是，我们就可以很方便地在我们的</span><span>makefile</span><span>中以&#8220;</span><span>$(OBJS)</span><span>&#8221;的方式来使用这个变量了。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>Makefile</span><span>里主要包含了五个东西：显式规则、隐晦规则、变量定义、文件指示和注释。</span></p>
<p><span>1</span><span>、显式规则。显式规则说明了，如果生成一个或多个目标文件。这是由</span><span>Makefile</span><span>的书写者明显指出，要生的文件，文件的依赖文件，生成的命令。</span></p>
<p><span>2</span><span>、隐晦规则。由于我们的</span><span>make</span><span>有自动推导的功能，所以隐晦的规则可以让我们比较粗糙地简略地书写</span><span>Makefile</span><span>，这是由</span><span>make</span><span>所支持的。</span></p>
<p><span>3</span><span>、变量的定义。在</span><span>Makefile</span><span>中我们要定义一系列的变量，变量一般都是字符串，这个有点像</span><span>C</span><span>语言中的宏，当</span><span>Makefile</span><span>被执行时，其中的变量都会被扩展到相应的引用位置上。</span></p>
<p><span>4</span><span>、文件指示。其包括了三个部分，一个是在一个</span><span>Makefile</span><span>中引用另一个</span><span>Makefile</span><span>，就像</span><span>C</span><span>语言中的</span><span>include</span><span>一样；另一个是指根据某些尾部指定</span><span>Makefile</span><span>中的有效部分，就像</span><span>C</span><span>语言中的预编译</span><span>#if</span><span>一样；还有就是定义一个多行的命令。</span></p>
<p><span>5</span><span>、注释。</span><span>Makefile</span><span>中只有行注释，和</span><span>UNIX</span><span>的</span><span>Shell</span><span>脚本一样，其注释是用&#8220;</span><span>#</span><span>&#8221;字符，这个就像</span><span>C/C++</span><span>中的&#8220;</span><span>//</span><span>&#8221;一样。如果你要在你的</span><span>Makefile</span><span>中使用&#8220;</span><span>#</span><span>&#8221;字符，可以用反斜杠进行转义，如：&#8220;</span><span>\#</span><span>&#8221;。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>先就整理到这里，不敢再往下看了，内容太多了，先有个概念，以后遇到问题再看。</span></p>
<img src ="http://www.cppblog.com/luqingfei/aggbug/124946.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2010-08-27 15:45 <a href="http://www.cppblog.com/luqingfei/archive/2010/08/27/124946.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>虚函数、多态性 练习题一</title><link>http://www.cppblog.com/luqingfei/archive/2009/04/13/79782.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Mon, 13 Apr 2009 02:53:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/04/13/79782.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/79782.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/04/13/79782.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/79782.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/79782.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 题目：定义了一个基类Animal，它包含两个私有数据成员，一个是string成员，存储动作的名称（&#8220;Fido&#8221;），一个是整数成员weight，存储了动物的重量（单位是磅）。该基类还包含一个公共的虚拟成员函数who()和一个纯虚函数sound()，公共的虚拟成员函数who()返回一个string对象，该对象包含了Animal对象的名称和重量，纯虚函数sound()在派生类中应...&nbsp;&nbsp;<a href='http://www.cppblog.com/luqingfei/archive/2009/04/13/79782.html'>阅读全文</a><img src ="http://www.cppblog.com/luqingfei/aggbug/79782.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-04-13 10:53 <a href="http://www.cppblog.com/luqingfei/archive/2009/04/13/79782.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类继承练习题四</title><link>http://www.cppblog.com/luqingfei/archive/2009/03/26/77968.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Thu, 26 Mar 2009 10:10:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/03/26/77968.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/77968.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/03/26/77968.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/77968.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/77968.html</trackback:ping><description><![CDATA[4、定义一个Person类，它包含数据成员age、name和gender。从Person中派生一个类Employee，在新类中添加一个数据成员，存储个人的number。再从Employee中派生一个类Executive，每个派生类都应定义一个函数，来显示相关的信息（名称和类型，如"Fred Smith is an Employee"）。编写一个main()函数，生成两个数组，一个数组包含5个Executive对象，另一个数组包含5个一般的Employee对象，然后显示它们的信息。另外，调用从Employee类继承的成员函数，显示Executive的信息。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_180929 onclick="this.style.display='none'; Code_Closed_Text_180929.style.display='none'; Code_Open_Image_180929.style.display='inline'; Code_Open_Text_180929.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_180929 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_180929.style.display='none'; Code_Closed_Image_180929.style.display='inline'; Code_Closed_Text_180929.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_180929 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Person.h</span><span id=Code_Open_Text_180929 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Person.h<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Person&nbsp;class&nbsp;and&nbsp;class&nbsp;derived&nbsp;from&nbsp;Person</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#ifndef&nbsp;PERSON_H<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;PERSON_H</span><span style="COLOR: #000000"><br><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Person&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Person():&nbsp;age(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">),&nbsp;name(</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">),&nbsp;gender(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">f</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;{};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Default&nbsp;constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Person(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;theAge,&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;theGender);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Display&nbsp;details</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;age;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Age&nbsp;in&nbsp;years</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;name;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;gender;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;'m'&nbsp;or&nbsp;'f'</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">};<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Employee:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Person&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Employee()&nbsp;{};&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Default&nbsp;constructor&nbsp;-&nbsp;necessary&nbsp;to&nbsp;declare&nbsp;arrays</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;Employee(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;theAge,&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;theGender,&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;persNum):<br>&nbsp;&nbsp;&nbsp;&nbsp;Person(theAge,&nbsp;theName,&nbsp;theGender),&nbsp;personnelNumber(persNum)&nbsp;{}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Display&nbsp;details</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;personnelNumber;<br>};<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Executive:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Employee&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Executive()&nbsp;{};&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Default&nbsp;constructor&nbsp;-&nbsp;necessary&nbsp;to&nbsp;declare&nbsp;arrays</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;Executive(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;theAge,&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;theGender,&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;persNum):&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;Employee(theAge,&nbsp;theName,&nbsp;theGender,&nbsp;persNum)&nbsp;{}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Display&nbsp;details</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">};<br><br></span><span style="COLOR: #0000ff">#endif</span></span></div>
<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_180947 onclick="this.style.display='none'; Code_Closed_Text_180947.style.display='none'; Code_Open_Image_180947.style.display='inline'; Code_Open_Text_180947.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_180947 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_180947.style.display='none'; Code_Closed_Image_180947.style.display='inline'; Code_Closed_Text_180947.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_180947 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Person.cpp</span><span id=Code_Open_Text_180947 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Person.cpp<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Person&nbsp;class&nbsp;implementation</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Person.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br>Person::Person(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;theAge,&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;theGender):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;age(theAge),&nbsp;name(theName),&nbsp;gender(theGender)&nbsp;{<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Person::who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\nThis&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;name&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;who&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;age&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;years&nbsp;old.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Employee::who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;name&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;is&nbsp;a&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;(gender&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">f</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">female</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">male</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;employee&nbsp;aged&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;age&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Executive::who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;name&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;is&nbsp;a&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;(gender&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">f</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">female</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">male</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;executive.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>}<br><br></span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_181003 onclick="this.style.display='none'; Code_Closed_Text_181003.style.display='none'; Code_Open_Image_181003.style.display='inline'; Code_Open_Text_181003.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_181003 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_181003.style.display='none'; Code_Closed_Image_181003.style.display='inline'; Code_Closed_Text_181003.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_181003 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">main.cpp </span><span id=Code_Open_Text_181003 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;main.cpp&nbsp;<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Working&nbsp;with&nbsp;Employee&nbsp;and&nbsp;Executive&nbsp;objects</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Person.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;Employee&nbsp;employees[</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;employees[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Employee(</span><span style="COLOR: #000000">21</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Randy&nbsp;Marathon</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">34567</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;employees[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Employee(</span><span style="COLOR: #000000">32</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Anna&nbsp;Pothecary</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">f</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">34578</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;employees[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Employee(</span><span style="COLOR: #000000">46</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Peter&nbsp;Out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">34589</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;employees[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Employee(</span><span style="COLOR: #000000">37</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sheila&nbsp;Rangeit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">f</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">34598</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;employees[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Employee(</span><span style="COLOR: #000000">65</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Jack&nbsp;Ittin</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">34667</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">&nbsp;employees</span><span style="COLOR: #000000">/</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(Employee);&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;employees[i].who();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Executive&nbsp;executives[</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;executives[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Executive(</span><span style="COLOR: #000000">44</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Irwin&nbsp;Pootlemeyer</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">35567</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;executives[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Executive(</span><span style="COLOR: #000000">32</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Alexa&nbsp;Workwell</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">f</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">35578</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;executives[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Executive(</span><span style="COLOR: #000000">42</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Steve&nbsp;Stove</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">35589</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;executives[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Executive(</span><span style="COLOR: #000000">33</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sue&nbsp;Neenuf</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">f</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">35598</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;executives[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Executive(</span><span style="COLOR: #000000">29</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Melanie&nbsp;Clair</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">f</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">35667</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">&nbsp;executives</span><span style="COLOR: #000000">/</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(Executive)&nbsp;;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;executives[i].who();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;executives[i].Employee::who();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}<br><br><br><br></span></span></div>
<img src ="http://www.cppblog.com/luqingfei/aggbug/77968.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-03-26 18:10 <a href="http://www.cppblog.com/luqingfei/archive/2009/03/26/77968.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类继承练习题三</title><link>http://www.cppblog.com/luqingfei/archive/2009/03/26/77964.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Thu, 26 Mar 2009 09:29:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/03/26/77964.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/77964.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/03/26/77964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/77964.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/77964.html</trackback:ping><description><![CDATA[3、在上一题中，把基类成员who()的访问指定符改为public，但把who()函数实现为每个派生类的成员，且在输出消息中显示派生类名。现在修改main()函数，为每个派生类对象调用who()的基类版本和派生类版本。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_172729 onclick="this.style.display='none'; Code_Closed_Text_172729.style.display='none'; Code_Open_Image_172729.style.display='inline'; Code_Open_Text_172729.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_172729 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_172729.style.display='none'; Code_Closed_Image_172729.style.display='inline'; Code_Closed_Text_172729.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_172729 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Animal.h</span><span id=Code_Open_Text_172729 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Animal.h<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Animal&nbsp;clas&nbsp;and&nbsp;classes&nbsp;derived&nbsp;from&nbsp;Animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#ifndef&nbsp;ANIMAL_H<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;ANIMAL_H</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Animal&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Animal(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Display&nbsp;name&nbsp;and&nbsp;weight</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Name&nbsp;of&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;weight;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Weight&nbsp;of&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">};<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Lion:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Animal&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Lion(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt):&nbsp;Animal(theName,&nbsp;wt)&nbsp;{}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;<br>};<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Aardvark:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Animal&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Aardvark(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt):&nbsp;Animal(theName,&nbsp;wt)&nbsp;{}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;<br>};<br><br></span><span style="COLOR: #0000ff">#endif</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_172757 onclick="this.style.display='none'; Code_Closed_Text_172757.style.display='none'; Code_Open_Image_172757.style.display='inline'; Code_Open_Text_172757.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_172757 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_172757.style.display='none'; Code_Closed_Image_172757.style.display='inline'; Code_Closed_Text_172757.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_172757 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Animal.cpp</span><span id=Code_Open_Text_172757 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Animal.cpp<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Implementations&nbsp;of&nbsp;the&nbsp;Animal&nbsp;class&nbsp;and&nbsp;classes&nbsp;derived&nbsp;from&nbsp;Animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Animal.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">Animal::Animal(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt):&nbsp;name(theName),&nbsp;weight(wt)&nbsp;{&nbsp;}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Identify&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Animal::who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\nMy&nbsp;name&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;name&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;and&nbsp;I&nbsp;weight&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;weight&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Identify&nbsp;the&nbsp;Lion</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Lion::who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">I'm&nbsp;lion:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;Animal::who();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Call&nbsp;protected&nbsp;base&nbsp;function</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Identify&nbsp;the&nbsp;Aardvark</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Aardvark::who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">I'm&nbsp;aardvark:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;Animal::who();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Call&nbsp;protected&nbsp;base&nbsp;function</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_172825 onclick="this.style.display='none'; Code_Closed_Text_172825.style.display='none'; Code_Open_Image_172825.style.display='inline'; Code_Open_Text_172825.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_172825 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_172825.style.display='none'; Code_Closed_Image_172825.style.display='inline'; Code_Closed_Text_172825.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_172825 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">main.cpp </span><span id=Code_Open_Text_172825 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;main.cpp&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Animal.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;Lion&nbsp;myLion(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Leo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">400</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;Aardvark&nbsp;myAardvark(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Algernon</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\nCalling&nbsp;derived&nbsp;versions&nbsp;of&nbsp;who():\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;myLion.who();<br>&nbsp;&nbsp;myAardvark.who();<br><br>&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n\nCalling&nbsp;base&nbsp;versions&nbsp;of&nbsp;who():</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;myLion.Animal::who();<br>&nbsp;&nbsp;myAardvark.Animal::who();<br>&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}<br></span></span></div>
<img src ="http://www.cppblog.com/luqingfei/aggbug/77964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-03-26 17:29 <a href="http://www.cppblog.com/luqingfei/archive/2009/03/26/77964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类继承练习题二</title><link>http://www.cppblog.com/luqingfei/archive/2009/03/26/77962.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Thu, 26 Mar 2009 09:15:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/03/26/77962.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/77962.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/03/26/77962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/77962.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/77962.html</trackback:ping><description><![CDATA[2、在Animal类中，把who()函数的访问指定符改为protected，但类的其他内容不变。现在修改派生类，使原来的main()函数仍然工作。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_171340 onclick="this.style.display='none'; Code_Closed_Text_171340.style.display='none'; Code_Open_Image_171340.style.display='inline'; Code_Open_Text_171340.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_171340 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_171340.style.display='none'; Code_Closed_Image_171340.style.display='inline'; Code_Closed_Text_171340.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_171340 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Animal.h</span><span id=Code_Open_Text_171340 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Animal.h<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Animal&nbsp;clas&nbsp;and&nbsp;classes&nbsp;derived&nbsp;from&nbsp;Animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#ifndef&nbsp;ANIMAL_H<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;ANIMAL_H</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Animal&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Animal(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Display&nbsp;name&nbsp;and&nbsp;weight</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Name&nbsp;of&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;weight;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Weight&nbsp;of&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">};<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Lion:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Animal&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Lion(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt):&nbsp;Animal(theName,&nbsp;wt)&nbsp;{}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;<br>};<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Aardvark:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Animal&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Aardvark(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt):&nbsp;Animal(theName,&nbsp;wt)&nbsp;{}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;<br>};<br><br></span><span style="COLOR: #0000ff">#endif</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_171403 onclick="this.style.display='none'; Code_Closed_Text_171403.style.display='none'; Code_Open_Image_171403.style.display='inline'; Code_Open_Text_171403.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_171403 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_171403.style.display='none'; Code_Closed_Image_171403.style.display='inline'; Code_Closed_Text_171403.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_171403 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Animal.cpp</span><span id=Code_Open_Text_171403 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Animal.cpp<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Implementations&nbsp;of&nbsp;the&nbsp;Animal&nbsp;class&nbsp;and&nbsp;classes&nbsp;derived&nbsp;from&nbsp;Animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Animal.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">Animal::Animal(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt):&nbsp;name(theName),&nbsp;weight(wt)&nbsp;{&nbsp;}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Identify&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Animal::who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\nMy&nbsp;name&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;name&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;and&nbsp;I&nbsp;weight&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;weight&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Identify&nbsp;the&nbsp;Lion</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Lion::who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">I'm&nbsp;lion:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;Animal::who();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Call&nbsp;protected&nbsp;base&nbsp;function</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Identify&nbsp;the&nbsp;Aardvark</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Aardvark::who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">I'm&nbsp;aardvark:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;Animal::who();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Call&nbsp;protected&nbsp;base&nbsp;function</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_171435 onclick="this.style.display='none'; Code_Closed_Text_171435.style.display='none'; Code_Open_Image_171435.style.display='inline'; Code_Open_Text_171435.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_171435 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_171435.style.display='none'; Code_Closed_Image_171435.style.display='inline'; Code_Closed_Text_171435.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_171435 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">main.cpp</span><span id=Code_Open_Text_171435 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;main.cpp&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Animal.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;Lion&nbsp;lion1(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Leo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">400</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;Aardvark&nbsp;aardvark1(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Algernon</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;lion1.who();<br>&nbsp;&nbsp;&nbsp;&nbsp;aardvark1.who();<br>}<br><br></span></span></div>
<img src ="http://www.cppblog.com/luqingfei/aggbug/77962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-03-26 17:15 <a href="http://www.cppblog.com/luqingfei/archive/2009/03/26/77962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类继承练习题一</title><link>http://www.cppblog.com/luqingfei/archive/2009/03/26/77956.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Thu, 26 Mar 2009 08:33:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/03/26/77956.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/77956.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/03/26/77956.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/77956.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/77956.html</trackback:ping><description><![CDATA[1、定义一个基类Animal，它包含两个私有数据成员，一个是string，存储动物的名称（例如"Fido"或"Yogi"），另一个是整数成员weight，包含该动物的重量（单位是磅）。该类还包含一个公共成员函数who()，它可以显示一个消息，给出Animal对象的名称和重量。把Animal用作公共基类，派生两个类Lion和Aardvark。再编写一个main()函数，创建Lion和Aardvark对象（"Leo"，400磅；"Algernon"，50磅）。为派生类对象调用who()成员，说明who()成员在两个派生类中是继承得来的。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_163035 onclick="this.style.display='none'; Code_Closed_Text_163035.style.display='none'; Code_Open_Image_163035.style.display='inline'; Code_Open_Text_163035.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_163035 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_163035.style.display='none'; Code_Closed_Image_163035.style.display='inline'; Code_Closed_Text_163035.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_163035 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Animal.h</span><span id=Code_Open_Text_163035 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Animal.h<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Animal&nbsp;clas&nbsp;and&nbsp;classes&nbsp;derived&nbsp;from&nbsp;Animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#ifndef&nbsp;ANIMAL_H<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;ANIMAL_H</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Animal&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Animal(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Display&nbsp;name&nbsp;and&nbsp;weight</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Name&nbsp;of&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;weight;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Weight&nbsp;of&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">};<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Lion:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Animal&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Lion(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt):&nbsp;Animal(theName,&nbsp;wt)&nbsp;{}<br>};<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Aardvark:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Animal&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Aardvark(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt):&nbsp;Animal(theName,&nbsp;wt)&nbsp;{}<br>};<br><br></span><span style="COLOR: #0000ff">#endif</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_163052 onclick="this.style.display='none'; Code_Closed_Text_163052.style.display='none'; Code_Open_Image_163052.style.display='inline'; Code_Open_Text_163052.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_163052 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_163052.style.display='none'; Code_Closed_Image_163052.style.display='inline'; Code_Closed_Text_163052.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_163052 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Animal.cpp</span><span id=Code_Open_Text_163052 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Animal.cpp<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Implementations&nbsp;of&nbsp;the&nbsp;Animal&nbsp;class&nbsp;and&nbsp;classes&nbsp;derived&nbsp;from&nbsp;Animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Animal.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">Animal::Animal(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;theName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;wt):&nbsp;name(theName),&nbsp;weight(wt)&nbsp;{&nbsp;}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Identify&nbsp;the&nbsp;animal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Animal::who()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\nMy&nbsp;name&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;name&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;and&nbsp;I&nbsp;weight&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;weight&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_163225 onclick="this.style.display='none'; Code_Closed_Text_163225.style.display='none'; Code_Open_Image_163225.style.display='inline'; Code_Open_Text_163225.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_163225 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_163225.style.display='none'; Code_Closed_Image_163225.style.display='inline'; Code_Closed_Text_163225.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_163225 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">main.cpp </span><span id=Code_Open_Text_163225 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;main.cpp&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Animal.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;Lion&nbsp;lion1(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Leo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">400</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;Aardvark&nbsp;aardvark1(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Algernon</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;lion1.who();<br>&nbsp;&nbsp;&nbsp;&nbsp;aardvark1.who();<br>}<br><br><br><br></span></span></div>
<img src ="http://www.cppblog.com/luqingfei/aggbug/77956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-03-26 16:33 <a href="http://www.cppblog.com/luqingfei/archive/2009/03/26/77956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>运算符重载练习汇总：实现自己的string类（加强版）</title><link>http://www.cppblog.com/luqingfei/archive/2009/03/24/77742.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Tue, 24 Mar 2009 09:19:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/03/24/77742.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/77742.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/03/24/77742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/77742.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/77742.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、这些练习都建立上一习题的基础之上，首先为MyString类提供一个重载的赋值运算符。确保它不是自我赋值。用下面的语句测试这个运算符是否正常工作，其中s1、s2和s3都是MyString对象：&nbsp;&nbsp;&nbsp;&nbsp; s1=s2;&nbsp;&nbsp;&nbsp;&nbsp; s1=s1;&nbsp;&nbsp;&nbsp;&nbsp; s1=s2=s3;2、重载+运算...&nbsp;&nbsp;<a href='http://www.cppblog.com/luqingfei/archive/2009/03/24/77742.html'>阅读全文</a><img src ="http://www.cppblog.com/luqingfei/aggbug/77742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-03-24 17:19 <a href="http://www.cppblog.com/luqingfei/archive/2009/03/24/77742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类的操作练习题四：实现自己的string类</title><link>http://www.cppblog.com/luqingfei/archive/2009/03/19/77196.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Thu, 19 Mar 2009 08:09:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/03/19/77196.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/77196.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/03/19/77196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/77196.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/77196.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: a、标准库包含一个string类，但创建自己的string类可以弄明设计和编写C++类的许多问题。使用基本的char数据类型编写一个string类，看看它如何隐藏使用C样式字符串时的复杂性。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为MyString类创建一个头文件，把它放在自己的命名空间中。给这个类提供两个私有数据成员：整型长度和char*，char*指向对象所管理...&nbsp;&nbsp;<a href='http://www.cppblog.com/luqingfei/archive/2009/03/19/77196.html'>阅读全文</a><img src ="http://www.cppblog.com/luqingfei/aggbug/77196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-03-19 16:09 <a href="http://www.cppblog.com/luqingfei/archive/2009/03/19/77196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类的操作练习题三</title><link>http://www.cppblog.com/luqingfei/archive/2009/03/18/77042.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Wed, 18 Mar 2009 10:09:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/03/18/77042.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/77042.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/03/18/77042.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/77042.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/77042.html</trackback:ping><description><![CDATA[接类的操作练习一、二<br>重新编写比较函数，把它作为Sequence类的一个友元。如何改变参数和调用该函数的方式？最好使用什么技术？<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_180759 onclick="this.style.display='none'; Code_Closed_Text_180759.style.display='none'; Code_Open_Image_180759.style.display='inline'; Code_Open_Text_180759.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_180759 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_180759.style.display='none'; Code_Closed_Image_180759.style.display='inline'; Code_Closed_Text_180759.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_180759 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Sequence.h</span><span id=Code_Open_Text_180759 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Sequence.h</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#ifndef&nbsp;SEQUENCE_H<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;SEQUENCE_H</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Class&nbsp;encapsulating&nbsp;a&nbsp;sequence&nbsp;of&nbsp;integers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Sequence&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Sequence();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Default&nbsp;constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Sequence(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;start,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Sequence();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Desctructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;show();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Output&nbsp;a&nbsp;sequence<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">bool&nbsp;equals(const&nbsp;Sequence&amp;&nbsp;seq)&nbsp;const;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Compare&nbsp;this&nbsp;sequence&nbsp;with&nbsp;another<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Friend&nbsp;for&nbsp;comparing&nbsp;Sequence&nbsp;objects</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;equals(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Sequence</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;seq1,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Sequence</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;seq2);<br><br></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pSequence;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Pointer&nbsp;to&nbsp;a&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Sequence&nbsp;length</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">};<br></span><span style="COLOR: #0000ff">#endif</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_180815 onclick="this.style.display='none'; Code_Closed_Text_180815.style.display='none'; Code_Open_Image_180815.style.display='inline'; Code_Open_Text_180815.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_180815 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_180815.style.display='none'; Code_Closed_Image_180815.style.display='inline'; Code_Closed_Text_180815.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_180815 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Sequence.cpp</span><span id=Code_Open_Text_180815 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Sequence.cpp<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Implementation&nbsp;of&nbsp;the&nbsp;Sequence&nbsp;class<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;encapsulating&nbsp;an&nbsp;arbitrary&nbsp;length&nbsp;sequence&nbsp;of&nbsp;integers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sequence.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iomanip</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Default&nbsp;constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">Sequence::Sequence()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequence&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[length];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSequence[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i;<br>}<br><br>Sequence::Sequence(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;start,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;length&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;:&nbsp;length;<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequence&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[length];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSequence[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;start</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Destructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">Sequence::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Sequence()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Destructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;pSequence;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Output&nbsp;a&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Sequence::show()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::setw(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(pSequence[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">length)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;pSequence[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Comparison</span><span style="COLOR: #008000"><br>/*</span><span style="COLOR: #008000"><br>bool&nbsp;Sequence::equals(const&nbsp;Sequence&amp;&nbsp;seq)&nbsp;const&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(length&nbsp;!=&nbsp;seq.length)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&lt;length;&nbsp;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pSequence[i]&nbsp;!=&nbsp;seq.pSequence[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;<br>}<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;equals(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Sequence</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;seq1,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Sequence</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;seq2)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(seq1.length&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;seq2.length)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">seq1.length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(seq1.pSequence[i]&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;seq2.pSequence[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>}<br></span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_180832 onclick="this.style.display='none'; Code_Closed_Text_180832.style.display='none'; Code_Open_Image_180832.style.display='inline'; Code_Open_Text_180832.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_180832 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_180832.style.display='none'; Code_Closed_Image_180832.style.display='inline'; Code_Closed_Text_180832.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_180832 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">main.cpp</span><span id=Code_Open_Text_180832 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;main.cpp<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstdlib</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ctime</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sequence.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nSeq&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;Sequence</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">&nbsp;pSequences&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">[nSeq];<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequences[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequences[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequences[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequences[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequences[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sequences[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&lt;&lt;&nbsp;((pSequences[i]-&gt;equals(*pSequences[j]))&nbsp;?&nbsp;"&nbsp;is&nbsp;"&nbsp;:&nbsp;"&nbsp;is&nbsp;not&nbsp;")</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;((equals(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pSequences[i],&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pSequences[j]))&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;is&nbsp;not&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;equal&nbsp;to&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sequences[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">].</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;First&nbsp;delete&nbsp;the&nbsp;Sequence&nbsp;objects&nbsp;in&nbsp;the&nbsp;free&nbsp;store</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">nSeq;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pSequences[j];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;pSequences;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Now&nbsp;delete&nbsp;the&nbsp;array&nbsp;holding&nbsp;their&nbsp;addresses</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>}<br><br></span></span></div>
<br>
<img src ="http://www.cppblog.com/luqingfei/aggbug/77042.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-03-18 18:09 <a href="http://www.cppblog.com/luqingfei/archive/2009/03/18/77042.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类的操作练习题二</title><link>http://www.cppblog.com/luqingfei/archive/2009/03/18/77040.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Wed, 18 Mar 2009 09:53:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/03/18/77040.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/77040.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/03/18/77040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/77040.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/77040.html</trackback:ping><description><![CDATA[接类的操作练习题一<br>编写一个函数，比较两个序列。如果Sequence对象有不同的长度，它们就是不同的，如果Sequence对象有相同的长度，但对应的值不同，它们也是不同的。只有Sequence对象有相同的长度，且对应的值也相同，它们才是相同的。把这个函数编写为Sequence类的一个成员。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_175149 onclick="this.style.display='none'; Code_Closed_Text_175149.style.display='none'; Code_Open_Image_175149.style.display='inline'; Code_Open_Text_175149.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_175149 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_175149.style.display='none'; Code_Closed_Image_175149.style.display='inline'; Code_Closed_Text_175149.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_175149 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Sequence.h</span><span id=Code_Open_Text_175149 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Sequence.h</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#ifndef&nbsp;SEQUENCE_H<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;SEQUENCE_H</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Class&nbsp;encapsulating&nbsp;a&nbsp;sequence&nbsp;of&nbsp;integers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Sequence&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Sequence();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Default&nbsp;constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Sequence(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;start,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Sequence();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Desctructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;show();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Output&nbsp;a&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;equals(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Sequence</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;seq)&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Compare&nbsp;this&nbsp;sequence&nbsp;with&nbsp;another</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pSequence;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Pointer&nbsp;to&nbsp;a&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Sequence&nbsp;length</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">};<br></span><span style="COLOR: #0000ff">#endif</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_175210 onclick="this.style.display='none'; Code_Closed_Text_175210.style.display='none'; Code_Open_Image_175210.style.display='inline'; Code_Open_Text_175210.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_175210 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_175210.style.display='none'; Code_Closed_Image_175210.style.display='inline'; Code_Closed_Text_175210.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_175210 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Sequence.cpp</span><span id=Code_Open_Text_175210 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Sequence.cpp<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Implementation&nbsp;of&nbsp;the&nbsp;Sequence&nbsp;class<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;encapsulating&nbsp;an&nbsp;arbitrary&nbsp;length&nbsp;sequence&nbsp;of&nbsp;integers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sequence.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iomanip</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Default&nbsp;constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">Sequence::Sequence()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequence&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[length];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSequence[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i;<br>}<br><br>Sequence::Sequence(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;start,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;length&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;:&nbsp;length;<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequence&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[length];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSequence[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;start</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Destructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">Sequence::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Sequence()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Destructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;pSequence;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Output&nbsp;a&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Sequence::show()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::setw(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(pSequence[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">length)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;pSequence[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Comparison</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;Sequence::equals(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Sequence</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;seq)&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(length&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;seq.length)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pSequence[i]&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;seq.pSequence[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>}</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_175228 onclick="this.style.display='none'; Code_Closed_Text_175228.style.display='none'; Code_Open_Image_175228.style.display='inline'; Code_Open_Text_175228.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_175228 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_175228.style.display='none'; Code_Closed_Image_175228.style.display='inline'; Code_Closed_Text_175228.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_175228 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">main.cpp</span><span id=Code_Open_Text_175228 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstdlib</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ctime</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sequence.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nSeq&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;Sequence</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">&nbsp;pSequences&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">[nSeq];<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequences[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequences[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequences[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequences[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequences[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sequences[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;((pSequences[i]</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">equals(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pSequences[j]))&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;is&nbsp;not&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;equal&nbsp;to&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sequences[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">].</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;First&nbsp;delete&nbsp;the&nbsp;Sequence&nbsp;objects&nbsp;in&nbsp;the&nbsp;free&nbsp;store</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">nSeq;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pSequences[j];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;pSequences;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Now&nbsp;delete&nbsp;the&nbsp;array&nbsp;holding&nbsp;their&nbsp;addresses</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>}</span></span></div>
<br>
<img src ="http://www.cppblog.com/luqingfei/aggbug/77040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-03-18 17:53 <a href="http://www.cppblog.com/luqingfei/archive/2009/03/18/77040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类的操作练习题一</title><link>http://www.cppblog.com/luqingfei/archive/2009/03/18/77033.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Wed, 18 Mar 2009 08:45:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/03/18/77033.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/77033.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/03/18/77033.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/77033.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/77033.html</trackback:ping><description><![CDATA[编写一个类Sequence，在自由存储区中按照升序存储整数值的递增序列。序列的长度和起始值在构造函数中提供。确保该序列至少有两个值，默认有10个值，从0开始（0，1，2，3，4，5，6，7，8，9）。需要有足够的内存空间来存储该序列，再用要求的值填充内存。<br>提供show()函数列出该序列，以确保正确创建Sequence对象。<br>确保在销毁Sequence对象时，释放分配给序列的内存（注意：确保释放所有的内存！）。<br>创建并输出5个随机长度（长度有限！）的序列和一个默认序列，来演示这个类的操作。<br><br>本题主要用到的技术点有：类的内部动态分配内存，类的析构函数等。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_164324 onclick="this.style.display='none'; Code_Closed_Text_164324.style.display='none'; Code_Open_Image_164324.style.display='inline'; Code_Open_Text_164324.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_164324 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_164324.style.display='none'; Code_Closed_Image_164324.style.display='inline'; Code_Closed_Text_164324.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_164324 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Sequence.h</span><span id=Code_Open_Text_164324 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Sequence.h</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#ifndef&nbsp;SEQUENCE_H<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;SEQUENCE_H</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Class&nbsp;encapsulating&nbsp;a&nbsp;sequence&nbsp;of&nbsp;integers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Sequence&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Sequence();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Default&nbsp;constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Sequence(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;start,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Sequence();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Desctructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;show();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Output&nbsp;a&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pSequence;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Pointer&nbsp;to&nbsp;a&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Sequence&nbsp;length</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">};<br></span><span style="COLOR: #0000ff">#endif</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_164349 onclick="this.style.display='none'; Code_Closed_Text_164349.style.display='none'; Code_Open_Image_164349.style.display='inline'; Code_Open_Text_164349.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_164349 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_164349.style.display='none'; Code_Closed_Image_164349.style.display='inline'; Code_Closed_Text_164349.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_164349 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Sequence.cpp</span><span id=Code_Open_Text_164349 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Sequence.cpp<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Implementation&nbsp;of&nbsp;the&nbsp;Sequence&nbsp;class<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;encapsulating&nbsp;an&nbsp;arbitrary&nbsp;length&nbsp;sequence&nbsp;of&nbsp;integers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sequence.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iomanip</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Default&nbsp;constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">Sequence::Sequence()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequence&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[length];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSequence[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i;<br>}<br><br>Sequence::Sequence(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;start,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;length)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;length&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;:&nbsp;length;<br>&nbsp;&nbsp;&nbsp;&nbsp;pSequence&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[length];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSequence[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;start</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Destructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">Sequence::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Sequence()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Destructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;pSequence;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Output&nbsp;a&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Sequence::show()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::setw(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(pSequence[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">length)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;pSequence[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_164414 onclick="this.style.display='none'; Code_Closed_Text_164414.style.display='none'; Code_Open_Image_164414.style.display='inline'; Code_Open_Text_164414.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_164414 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_164414.style.display='none'; Code_Closed_Image_164414.style.display='inline'; Code_Closed_Text_164414.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_164414 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">main.cpp</span><span id=Code_Open_Text_164414 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstdlib</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ctime</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sequence.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Function&nbsp;to&nbsp;generate&nbsp;a&nbsp;random&nbsp;integer&nbsp;from&nbsp;start&nbsp;to&nbsp;end</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">inline&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;random(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;start,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;end)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;start&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(end</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">static_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rand()))</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(RAND_MAX</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1L</span><span style="COLOR: #000000">));<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;srand((unsigned)time(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">));&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Initialize&nbsp;the&nbsp;random&nbsp;number&nbsp;generator</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nSeq&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;Sequence</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">&nbsp;pSequences&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">[nSeq];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">nSeq;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Generate&nbsp;a&nbsp;sequence&nbsp;with&nbsp;a&nbsp;random&nbsp;start&nbsp;and&nbsp;length</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSequences[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Sequence(random(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">),&nbsp;random(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sequence&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSequences[i]</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">show();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Output&nbsp;the&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Now&nbsp;the&nbsp;default&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Sequence&nbsp;sequence;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Default&nbsp;sequence&nbsp;:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;sequence.show();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Output&nbsp;the&nbsp;default&nbsp;sequence<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;First&nbsp;delete&nbsp;the&nbsp;Sequence&nbsp;objects&nbsp;in&nbsp;the&nbsp;free&nbsp;store</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">nSeq;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pSequences[j];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;pSequences;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Now&nbsp;delete&nbsp;the&nbsp;array&nbsp;holding&nbsp;their&nbsp;addresses</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}</span></span></div>
<br>
<img src ="http://www.cppblog.com/luqingfei/aggbug/77033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-03-18 16:45 <a href="http://www.cppblog.com/luqingfei/archive/2009/03/18/77033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于C++中类的基础练习</title><link>http://www.cppblog.com/luqingfei/archive/2009/02/27/75095.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Fri, 27 Feb 2009 10:10:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/02/27/75095.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/75095.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/02/27/75095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/75095.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/75095.html</trackback:ping><description><![CDATA[<p>本次练习的内容，涉及到C++中类的构造函数，默认构造函数，副本构造函数，构造函数中的成员初始化列表，类的数据成员，类的成员函数，友元函数，等技术点。</p>
下面有4道题：<br>1、创建一个简单的类Integer，它只有一个私有数据成员int。为这个类提供构造函数，并使用它们输出创建对象的消息。提供类的成员函数，获取和设置数据成员，并输出该值。编写一个测试程序，创建和操作几个Integer对象。在测试程序中获取，设置和输出每个对象的数据成员值，以验证这些函数。<br>2、修改上一题类Integer的构造函数，把数据成员初始化为初始化列表中的0，并实现类的副本构造函数。编写一个成员函数，比较当前对象和作为参数传送的Interger对象。如果当前对象小于参数，该函数就返回-1，如果它们相等，函数就返回0，如果当前对象大于参数，函数就返回+1。测试该函数的两个版本：第一个版本的参数按值传送，第二个版本的参数按引用传送。在调用函数时，构造函数会输出什么结果？解释出现这种结果的原因。类中的函数不能是重载函数，为什么？<br>3、为类Integer实现成员函数add()、subtract()和multiply()，对当前对象和Integer类型的参数值进行加、减和乘法运算。在类中用main()演示这些函数的操作，main()创建几个Integer对象，它们分别包含值4、5、6、7和8，再使用这些对象计算4*5*5*5+6*5*5+7*5+8的值。实现这些函数，使计算和结果的输出在一个语句中完成。<br>4、修改题2的解决方法，把compare() 函数实现为类Integer的一个友元。<br><br>参考答案：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_180855 onclick="this.style.display='none'; Code_Closed_Text_180855.style.display='none'; Code_Open_Image_180855.style.display='inline'; Code_Open_Text_180855.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_180855 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_180855.style.display='none'; Code_Closed_Image_180855.style.display='inline'; Code_Closed_Text_180855.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_180855 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Integer.h</span><span id=Code_Open_Text_180855 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">#ifndef&nbsp;INTEGER_H<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INTEGER_H</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Integer&nbsp;{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer();<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m);<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer(Integer</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;integer);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;setValue(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m)&nbsp;{&nbsp;value&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;getValue()&nbsp;{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;value;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">int&nbsp;compare(const&nbsp;Integer&nbsp;integer)&nbsp;const;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;compare(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Integer</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;integer)&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;compare(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Integer</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;ineger1,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Integer</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;integer2);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Integer</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;add(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Integer</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;integer)&nbsp;{&nbsp;value&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;integer.value;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;add(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m)&nbsp;{&nbsp;value&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;m;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;subtract(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Integer</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;integer)&nbsp;{&nbsp;value&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;integer.value;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;subtract(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m)&nbsp;{&nbsp;value&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;m;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;multiply(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Integer</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;integer)&nbsp;{&nbsp;value&nbsp;</span><span style="COLOR: #000000">*=</span><span style="COLOR: #000000">&nbsp;integer.value;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;multiply(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m)&nbsp;{&nbsp;value&nbsp;</span><span style="COLOR: #000000">*=</span><span style="COLOR: #000000">&nbsp;m;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;&nbsp;}<br><br></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;value;<br>};<br><br></span><span style="COLOR: #0000ff">#endif</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_180930 onclick="this.style.display='none'; Code_Closed_Text_180930.style.display='none'; Code_Open_Image_180930.style.display='inline'; Code_Open_Text_180930.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_180930 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_180930.style.display='none'; Code_Closed_Image_180930.style.display='inline'; Code_Closed_Text_180930.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_180930 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">integer.cpp</span><span id=Code_Open_Text_180930 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">integer.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br><br>Integer::Integer():value(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Default&nbsp;constructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}<br><br>Integer::Integer(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m):value(m)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Constructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>};<br><br>Integer::Integer(Integer</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;integer):value(integer.value)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Copy&nbsp;constructor&nbsp;called.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">value&nbsp;=&nbsp;integer.value+100;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}<br><br></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">int&nbsp;Integer::compare(const&nbsp;Integer&nbsp;integer)&nbsp;const&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m&nbsp;=&nbsp;value;<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;n&nbsp;=&nbsp;integer.value;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(value&lt;integer.value)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(value==integer.value)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;<br>}</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Integer::compare(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Integer</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;integer)&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(value</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">integer.value)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(value</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">integer.value)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>}</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;main.cpp</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">integer.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Default&nbsp;value&nbsp;of&nbsp;integer:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;integer.getValue()&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;integer.setValue(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Value&nbsp;of&nbsp;integer:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;integer.getValue()&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;int2(integer);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Copy&nbsp;obj:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;int2.getValue()&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;int3(</span><span style="COLOR: #000000">999</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;int3.getValue()&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;int2.compare(int3);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;result&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;compare(int2,&nbsp;int3);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;result&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;4*5*5*5&nbsp;+&nbsp;6*5*5&nbsp;+&nbsp;7*5&nbsp;+&nbsp;8</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;int4(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;int5(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;int6(</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;int7(</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;int8(</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Integer</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;result2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;int4.multiply(int5)</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">multiply(int5)</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">multiply(int5)</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(int6.multiply(int5)</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">multiply(int5)</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">getValue())</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(int7.multiply(int5)</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">getValue())</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">add(int8);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">4*5*5*5&nbsp;+&nbsp;6*5*5&nbsp;+&nbsp;7*5&nbsp;+&nbsp;8&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;result2</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">getValue()&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>}<br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;compare(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Integer</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;ineger1,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Integer</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;integer2){<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">friend&nbsp;function:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ineger1.value</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">integer2.value)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ineger1.value</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">integer2.value)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>}</span></div>
<br>
<img src ="http://www.cppblog.com/luqingfei/aggbug/75095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-02-27 18:10 <a href="http://www.cppblog.com/luqingfei/archive/2009/02/27/75095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++中复杂的结构</title><link>http://www.cppblog.com/luqingfei/archive/2009/02/24/74760.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Tue, 24 Feb 2009 07:36:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/02/24/74760.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/74760.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/02/24/74760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/74760.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/74760.html</trackback:ping><description><![CDATA[结构的数据成员可以是任何类型，包括联合（union）和其他结构。<br>声明一个复杂点的结构，它有两个成员，第一个成员是一个联合，第二个成员是枚举。<br>enum Type {Double, Float, Long, Int};<br>stuct SharedData {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; union {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double dData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float fData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long lData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int iData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type type;<br>};<br><br>注意，SharedData的联合成员是匿名的，这表示在引用SharedData类型的对象的联合成员时，不必指定联合名。<br><br>练习题：<br>扩展上面的SharedData结构及相关的枚举类型，以存储4种类型的指针。测试一下，看看是否能存储变量的指针。<br><br>参考答案：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_153359 onclick="this.style.display='none'; Code_Closed_Text_153359.style.display='none'; Code_Open_Image_153359.style.display='inline'; Code_Open_Text_153359.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_153359 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_153359.style.display='none'; Code_Closed_Image_153359.style.display='inline'; Code_Closed_Text_153359.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_153359 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">shareddata.h</span><span id=Code_Open_Text_153359 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;shareddata.h<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Definitions&nbsp;for&nbsp;Type&nbsp;enumeration&nbsp;and&nbsp;SharedData&nbsp;structure</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#ifndef&nbsp;SHAREDDATA_H<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;SHAREDDATA_H</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">enum</span><span style="COLOR: #000000">&nbsp;Type&nbsp;{&nbsp;Double,&nbsp;Float,&nbsp;Long,&nbsp;Int,&nbsp;pDouble,&nbsp;pFloat,&nbsp;pLong,&nbsp;pInt&nbsp;};<br><br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;SharedData&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;An&nbsp;anonymous&nbsp;union</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;dData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;fData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;lData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;iData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pdData;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Pointers&nbsp;to&nbsp;various&nbsp;types</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pfData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;plData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;piData;<br>&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;type;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Variable&nbsp;of&nbsp;the&nbsp;enumeration&nbsp;type&nbsp;Type</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;show();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Display&nbsp;a&nbsp;SharedData&nbsp;value</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">};<br></span><span style="COLOR: #0000ff">#endif</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_153420 onclick="this.style.display='none'; Code_Closed_Text_153420.style.display='none'; Code_Open_Image_153420.style.display='inline'; Code_Open_Text_153420.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_153420 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_153420.style.display='none'; Code_Closed_Image_153420.style.display='inline'; Code_Closed_Text_153420.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_153420 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">shareddata.cpp</span><span id=Code_Open_Text_153420 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;shareddata.cpp<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;SharedData&nbsp;function&nbsp;definition</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">shareddata.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SharedData::show()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">&nbsp;(type)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;Double:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Double&nbsp;value&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;dData&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;Float:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Float&nbsp;value&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;fData&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;Long:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Long&nbsp;value&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;lData&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;Int:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Int&nbsp;value&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;iData&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;pDouble:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Pointer&nbsp;to&nbsp;double&nbsp;value&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pdData&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;pFloat:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Pointer&nbsp;to&nbsp;float&nbsp;value&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pfData&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;pLong:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Pointer&nbsp;to&nbsp;long&nbsp;value&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">plData&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;pInt:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Pointer&nbsp;to&nbsp;int&nbsp;value&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">piData&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Error&nbsp;-&nbsp;Invalid&nbsp;Type</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>};</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_153444 onclick="this.style.display='none'; Code_Closed_Text_153444.style.display='none'; Code_Open_Image_153444.style.display='inline'; Code_Open_Text_153444.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_153444 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_153444.style.display='none'; Code_Closed_Image_153444.style.display='inline'; Code_Closed_Text_153444.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_153444 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">main.cpp</span><span id=Code_Open_Text_153444 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;main.cpp<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Exercisiong&nbsp;SharedData</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">shareddata.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;number&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">99</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;lNumber&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">9999999L</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;value&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1.618</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;pi&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3.1415f</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;SharedData&nbsp;shared&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #000000">0.1</span><span style="COLOR: #000000">&nbsp;};&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Initially&nbsp;a&nbsp;double</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;shared.show();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Now&nbsp;try&nbsp;all&nbsp;four&nbsp;pointers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;shared.piData&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">number;<br>&nbsp;&nbsp;&nbsp;&nbsp;shared.type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pInt;<br>&nbsp;&nbsp;&nbsp;&nbsp;shared.show();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;shared.plData&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">lNumber;<br>&nbsp;&nbsp;&nbsp;&nbsp;shared.type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pLong;<br>&nbsp;&nbsp;&nbsp;&nbsp;shared.show();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;shared.pdData&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">value;<br>&nbsp;&nbsp;&nbsp;&nbsp;shared.type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pDouble;<br>&nbsp;&nbsp;&nbsp;&nbsp;shared.show();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;shared.pfData&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pi;<br>&nbsp;&nbsp;&nbsp;&nbsp;shared.type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pFloat;<br>&nbsp;&nbsp;&nbsp;&nbsp;shared.show();<br>}</span></span></div>
<p><br>输出结果：<br><br>Double value is 0.1</p>
<p>Pointer to int value is 99</p>
<p>Pointer to long value is 9999999</p>
<p>Pointer to double value is 1.618</p>
<p>Pointer to float value is 3.1415</p>
<img src ="http://www.cppblog.com/luqingfei/aggbug/74760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-02-24 15:36 <a href="http://www.cppblog.com/luqingfei/archive/2009/02/24/74760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++中的结构</title><link>http://www.cppblog.com/luqingfei/archive/2009/02/24/74754.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Tue, 24 Feb 2009 06:34:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/02/24/74754.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/74754.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/02/24/74754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/74754.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/74754.html</trackback:ping><description><![CDATA[C语言中的结构，实际上是不同数据类型的数据项的一个指定聚合。<br>在C++中，结构通常用于相同的目的，但C++中的结构可以完成的工作要比C 的结构多，C++中不仅仅可以添加数据成员，还可以是函数成员，这与类有点相似了。<br>实际上，C++结构的功能可以用类来替代。<br>C++结构中的成员默认情况下可公开访问。<br><br>练习题：<br>编写一个简单的货币转换程序。为此，需要在货币对象中关联两个实体：货币类型和把货币转换为美元的转换因子。设计一个结构来表示货币对象，编写一个程序，让用户从一个列表中选择转换的货向类型，在任意两种货币之间转换。用户应输入值，并获得转换后的结果，如果输入了一个负值，就退出程序。<br><br>参考答案：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_143321 onclick="this.style.display='none'; Code_Closed_Text_143321.style.display='none'; Code_Open_Image_143321.style.display='inline'; Code_Open_Text_143321.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_143321 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_143321.style.display='none'; Code_Closed_Image_143321.style.display='inline'; Code_Closed_Text_143321.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_143321 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">currency.h</span><span id=Code_Open_Text_143321 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;currency.h<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;A&nbsp;currency&nbsp;converter</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#ifndef&nbsp;CURRENCY_H<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;CURRENCY_H</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Structure&nbsp;representing&nbsp;a&nbsp;currency</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;Currency&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;name[</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Currency&nbsp;name</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;amount;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;An&nbsp;amount&nbsp;in&nbsp;this&nbsp;currency</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;rate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Value&nbsp;of&nbsp;1&nbsp;unit&nbsp;of&nbsp;this&nbsp;currency&nbsp;in&nbsp;US&nbsp;dollars</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;code[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Currency&nbsp;code&nbsp;-&nbsp;3&nbsp;characters&nbsp;e.g.&nbsp;"USD"</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;convert(Currency&nbsp;amount);&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Convert&nbsp;amount&nbsp;to&nbsp;this&nbsp;currency</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;set_amount(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;amount);&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Set&nbsp;an&nbsp;amount&nbsp;in&nbsp;this&nbsp;currency</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;show();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Display&nbsp;the&nbsp;amount&nbsp;of&nbsp;this&nbsp;currence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">};<br><br></span><span style="COLOR: #0000ff">#endif</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_143346 onclick="this.style.display='none'; Code_Closed_Text_143346.style.display='none'; Code_Open_Image_143346.style.display='inline'; Code_Open_Text_143346.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_143346 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_143346.style.display='none'; Code_Closed_Image_143346.style.display='inline'; Code_Closed_Text_143346.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_143346 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">currency.cpp</span><span id=Code_Open_Text_143346 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;currency.cpp<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;currency&nbsp;converter</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iomanip</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">currency.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Display&nbsp;a&nbsp;currency&nbsp;amount&nbsp;with&nbsp;two&nbsp;decimal&nbsp;places</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Currency::show()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">fixed</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::setprecision(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;amount&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;code;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Sets&nbsp;the&nbsp;amount&nbsp;for&nbsp;the&nbsp;current&nbsp;currency</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Currency::set_amount(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;value)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(value&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">)&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Can't&nbsp;have&nbsp;a&nbsp;zero&nbsp;amount</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amount&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amount&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;value;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Convert&nbsp;the&nbsp;amount&nbsp;of&nbsp;the&nbsp;current&nbsp;currency&nbsp;the&nbsp;currency&nbsp;of&nbsp;the&nbsp;argument</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;Currency::convert(Currency&nbsp;currency)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;amount</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">rate</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">currency.rate;<br>}</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_143410 onclick="this.style.display='none'; Code_Closed_Text_143410.style.display='none'; Code_Open_Image_143410.style.display='inline'; Code_Open_Text_143410.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_143410 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_143410.style.display='none'; Code_Closed_Image_143410.style.display='inline'; Code_Closed_Text_143410.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_143410 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">main.cpp</span><span id=Code_Open_Text_143410 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;A&nbsp;currency&nbsp;converter</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">currency.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iomanip</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cctype</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cin;<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Array&nbsp;of&nbsp;standard&nbsp;currencies</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Currency&nbsp;currencies[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">US&nbsp;dollars</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">USD</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UK&nbsp;pounds</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1.69</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GBP</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Russian&nbsp;roubles</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0.033</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">RUR</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Japanese&nbsp;yen</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0.0084</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JPY</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Polish&nbsp;zlotys</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0.26</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PLN</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;currency_count&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">&nbsp;currencies</span><span style="COLOR: #000000">/</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">&nbsp;currencies[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Number&nbsp;of&nbsp;currencies</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;from_currency&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Index&nbsp;of&nbsp;currency&nbsp;converted&nbsp;from</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;to_currency&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Index&nbsp;of&nbsp;currency&nbsp;converted&nbsp;to&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;amount&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Amount&nbsp;to&nbsp;be&nbsp;converted</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;answer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Y/N&nbsp;input&nbsp;response</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Currencies&nbsp;available&nbsp;for&nbsp;conversion&nbsp;are:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">currency_count;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::setw(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">currencies[i].name&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Get&nbsp;from&nbsp;currency&nbsp;number&nbsp;and&nbsp;check&nbsp;it's&nbsp;within&nbsp;range</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Select&nbsp;the&nbsp;currency&nbsp;you&nbsp;want&nbsp;to&nbsp;convert&nbsp;from&nbsp;by&nbsp;number:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;from_currency;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(from_currency&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;from_currency</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">currency_count)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Invalid&nbsp;input&nbsp;-&nbsp;try&nbsp;again.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Get&nbsp;to&nbsp;currency&nbsp;number&nbsp;and&nbsp;check&nbsp;it's&nbsp;within&nbsp;range</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Select&nbsp;the&nbsp;currency&nbsp;you&nbsp;want&nbsp;to&nbsp;convert&nbsp;to&nbsp;by&nbsp;number:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;to_currency;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(from_currency&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;to_currency&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;to_currency&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;to_currency&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;currency_count)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Invalid&nbsp;input&nbsp;-&nbsp;try&nbsp;again.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Decrement&nbsp;so&nbsp;we&nbsp;canuse&nbsp;as&nbsp;an&nbsp;index&nbsp;value&nbsp;to&nbsp;the&nbsp;array</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">from_currency;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">to_currency;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Enter&nbsp;the&nbsp;amount&nbsp;of&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;currencies[from_currency].name&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;that&nbsp;you&nbsp;want&nbsp;to&nbsp;convert&nbsp;to&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;currencies[to_currency].name&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;amount;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(amount&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">The&nbsp;amount&nbsp;cannot&nbsp;be&nbsp;zero&nbsp;or&nbsp;negative&nbsp;-&nbsp;try&nbsp;again.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currencies[from_currency].set_amount(amount);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currencies[to_currency].set_amount(currencies[from_currency].convert(currencies[to_currency]));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currencies[from_currency].show();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;is&nbsp;worth&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currencies[to_currency].show();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Do&nbsp;you&nbsp;want&nbsp;another&nbsp;conversion&nbsp;(y/n)?&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;answer;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(tolower(answer)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">y</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br><br>}<br></span></span></div>
<br>
<img src ="http://www.cppblog.com/luqingfei/aggbug/74754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-02-24 14:34 <a href="http://www.cppblog.com/luqingfei/archive/2009/02/24/74754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序文件和预处理器指令习题</title><link>http://www.cppblog.com/luqingfei/archive/2009/02/18/74162.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Wed, 18 Feb 2009 08:26:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/02/18/74162.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/74162.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/02/18/74162.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/74162.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/74162.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/luqingfei/archive/2009/02/18/74162.html'>阅读全文</a><img src ="http://www.cppblog.com/luqingfei/aggbug/74162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-02-18 16:26 <a href="http://www.cppblog.com/luqingfei/archive/2009/02/18/74162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] VC6不支持模板函数在cpp文件中的实现</title><link>http://www.cppblog.com/luqingfei/archive/2009/02/17/74024.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Tue, 17 Feb 2009 04:51:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/02/17/74024.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/74024.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/02/17/74024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/74024.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/74024.html</trackback:ping><description><![CDATA[<span id=ArticleContent1_ArticleContent1_lblContent>&nbsp;例如：<br>//myHeader.h<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">max(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;<br>};<br>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::max(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">b:a;<br>}<br></span></div>
<p><br>//main.cpp</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;&#8220;myHeader.h&#8220;<br><br>main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">cls</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">cls</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">max(a,b)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}<br></span></div>
<p><br>按照上面的格式就可以执行。如果把class A的函数max的实现从头文件中拿出来放在一个cpp文件中<br>，则会产生错误，代码如下：<br>//myHeader.h<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">max(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">;<br>};<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">classA.cpp</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;&#8220;myHeader.h&#8220;<br>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::max(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">b:a;<br>}<br></span></div>
<p><br>//main.cpp</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;&#8220;myHeader.h&#8220;<br><br>main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">cls</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">cls</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">max(a,b)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}<br></span></div>
<p><br>这时候就会出错，原因就是VC6不支持模板函数在cpp文件中的实现。解决的办法是把其实现放在头文件中，<br>不一定放在定义类的头文件中，可以放在独立的头文件中。<br>注意：其实根据实质，也可以把模板函数的实现放在cpp文件中，但是要把cpp文件包含在调用该模板函数的<br>文件中。<br>代码如下：<br>//myHeader.h</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><br>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A<br>{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br>&nbsp;A();<br>&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;max(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">);<br>&nbsp;<br>};<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">classA.cpp</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myHeader.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::max(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b)<br>{<br>&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">b:a;<br>}<br>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::A()<br>{<br>&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">constructor!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(T)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>}<br><br></span></div>
<p><br>//main.cpp</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myHeader.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">classA.cpp</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>main()<br>{<br>&nbsp;A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">cls</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">();<br>&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br>&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br>&nbsp;A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;A</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">();<br>&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;d1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">100.2</span><span style="COLOR: #000000">;<br>&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;d2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">200.2</span><span style="COLOR: #000000">;<br>&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">cls</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">max(a,b)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">max(d1,d2)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}<br></span></div>
</span>
<img src ="http://www.cppblog.com/luqingfei/aggbug/74024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-02-17 12:51 <a href="http://www.cppblog.com/luqingfei/archive/2009/02/17/74024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于使用命名空间及声明外部变量的练习</title><link>http://www.cppblog.com/luqingfei/archive/2009/02/16/73947.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Mon, 16 Feb 2009 08:38:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/02/16/73947.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/73947.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/02/16/73947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/73947.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/73947.html</trackback:ping><description><![CDATA[File1<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;data&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;The&nbsp;next&nbsp;two&nbsp;variables&nbsp;have&nbsp;external&nbsp;linkage</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;count;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;will&nbsp;be&nbsp;initialized&nbsp;to&nbsp;9&nbsp;by&nbsp;default</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;phi&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1.618f</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;the&nbsp;divine&nbsp;proportion&nbsp;or&nbsp;golden&nbsp;ratio<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;without&nbsp;the&nbsp;extern,&nbsp;the&nbsp;following&nbsp;would&nbsp;not&nbsp;be&nbsp;accessible<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;from&nbsp;another&nbsp;file&nbsp;because&nbsp;they&nbsp;would&nbsp;have&nbsp;internal&nbsp;linkage</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">extern</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;pi&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3.14159265</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">extern</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;days[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sunday</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Monday</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Tuesday</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Wednesday</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Thursday</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Friday</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Saturday</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;};<br>}</span></div>
<br><br>File2<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iomanip</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;data&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Declare&nbsp;external&nbsp;variables</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">extern</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;phi;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">extern</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;pi;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">extern</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;days[];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">extern</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;count;<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::setprecision(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">fixed</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::endl<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">To&nbsp;3&nbsp;decimal&nbsp;places<img src="http://www.cppblog.com/Images/dot.gif"></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/dot.gif">&nbsp;a&nbsp;circle&nbsp;with&nbsp;a&nbsp;diameter&nbsp;of&nbsp;phi&nbsp;has&nbsp;an&nbsp;area&nbsp;of</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;data::pi&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;data::phi&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;data::phi&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/dot.gif">phi&nbsp;squared&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;data::phi&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;data::phi&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/dot.gif">&nbsp;in&nbsp;fact,&nbsp;phi+1&nbsp;is&nbsp;also&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;data::phi</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">value&nbsp;of&nbsp;count&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;data::count&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;data::count&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">today&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;data::days[data::count]&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::endl;<br>}<br></span></div>
<br>
<img src ="http://www.cppblog.com/luqingfei/aggbug/73947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-02-16 16:38 <a href="http://www.cppblog.com/luqingfei/archive/2009/02/16/73947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于函数指针及函数指针数组的练习</title><link>http://www.cppblog.com/luqingfei/archive/2009/02/13/73732.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Fri, 13 Feb 2009 10:05:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/02/13/73732.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/73732.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/02/13/73732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/73732.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/73732.html</trackback:ping><description><![CDATA[题目：<br>标准库提供了三角函数sin()、cos()和tan()，这些函数都带有一个double参数，返回一个double值。要使用它们，需要包含标准库头文件&lt;cmath&gt;。编写一个函数calc()，它带有两个参数：一个double值和一个指向三角函数的指针，返回把函数应用于double值的结果。编写一个程序，测试所编写的函数。如果该函数通过了测试，就建立一个函数指针数组，存储这个三个三角函数，并测试它们。<br><br>答案：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cmath</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;calc(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;d,&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pfun)(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">));<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pfun[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">])(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{sin,&nbsp;cos,&nbsp;tan};<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">&nbsp;pfun</span><span style="COLOR: #000000">/</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">&nbsp;pfun[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;calc(</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">,&nbsp;pfun[i])&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}<br><br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;calc(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;d,&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pfun)(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;pfun(d);<br>}</span></div>
<br>运行结果：<br>0.909297<br>-0.416147<br>-2.18504
<img src ="http://www.cppblog.com/luqingfei/aggbug/73732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-02-13 18:05 <a href="http://www.cppblog.com/luqingfei/archive/2009/02/13/73732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于函数模板及其重载的练习</title><link>http://www.cppblog.com/luqingfei/archive/2009/02/13/73730.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Fri, 13 Feb 2009 09:53:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/02/13/73730.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/73730.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/02/13/73730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/73730.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/73730.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Template&nbsp;function&nbsp;prototype</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;T&nbsp;plus(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;b);<br></span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;b);<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">plus(3,&nbsp;4)&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">plus(3.2,&nbsp;4.2)&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #000000">3.2</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">4.2</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">plus(\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">he\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">llo\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;plus(static_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">he</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),&nbsp;static_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">llo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">plus(static_cast&lt;double&gt;(3),&nbsp;4.2)&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;plus(static_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">),&nbsp;</span><span style="COLOR: #000000">4.2</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">plus(3,&nbsp;static_cast&lt;int&gt;(4.2))&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,&nbsp;static_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">4.2</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><br>}<br><br>template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;T&nbsp;plus(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;b)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;b;<br>}<br><br></span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;b)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">specifica</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;b;<br>}</span></div>
<br>运行结果：<br>plus(3, 4) = 7<br>plus(3.2, 4.2) = 7.4<br>specifica<br>plus("he", "llo") = hello<br>plus(static_cast&lt;double&gt;(3), 4.2) = 7.2<br>plus(3, static_cast&lt;int&gt;(4.2)) = 7
<img src ="http://www.cppblog.com/luqingfei/aggbug/73730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-02-13 17:53 <a href="http://www.cppblog.com/luqingfei/archive/2009/02/13/73730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于函数重载的练习</title><link>http://www.cppblog.com/luqingfei/archive/2009/02/13/73728.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Fri, 13 Feb 2009 09:34:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/02/13/73728.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/73728.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/02/13/73728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/73728.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/73728.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Function&nbsp;prototype</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_231_592_Open_Image onclick="this.style.display='none'; Codehighlighter1_231_592_Open_Text.style.display='none'; Codehighlighter1_231_592_Closed_Image.style.display='inline'; Codehighlighter1_231_592_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_231_592_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_231_592_Closed_Text.style.display='none'; Codehighlighter1_231_592_Open_Image.style.display='inline'; Codehighlighter1_231_592_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;</span><span id=Codehighlighter1_231_592_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_231_592_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">plus(3,&nbsp;4)&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">plus(3.2,&nbsp;4.2)&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #000000">3.2</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">4.2</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">plus(\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">he\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">llo\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">he</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">llo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">plus(static_cast&lt;double&gt;(3),&nbsp;4.2)&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;plus(static_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">),&nbsp;</span><span style="COLOR: #000000">4.2</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">plus(3,&nbsp;static_cast&lt;int&gt;(4.2))&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,&nbsp;static_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">4.2</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_618_635_Open_Image onclick="this.style.display='none'; Codehighlighter1_618_635_Open_Text.style.display='none'; Codehighlighter1_618_635_Closed_Image.style.display='inline'; Codehighlighter1_618_635_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_618_635_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_618_635_Closed_Text.style.display='none'; Codehighlighter1_618_635_Open_Image.style.display='inline'; Codehighlighter1_618_635_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)&nbsp;</span><span id=Codehighlighter1_618_635_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_618_635_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_670_687_Open_Image onclick="this.style.display='none'; Codehighlighter1_670_687_Open_Text.style.display='none'; Codehighlighter1_670_687_Closed_Image.style.display='inline'; Codehighlighter1_670_687_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_670_687_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_670_687_Closed_Text.style.display='none'; Codehighlighter1_670_687_Open_Image.style.display='inline'; Codehighlighter1_670_687_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;b)&nbsp;</span><span id=Codehighlighter1_670_687_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_670_687_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_736_753_Open_Image onclick="this.style.display='none'; Codehighlighter1_736_753_Open_Text.style.display='none'; Codehighlighter1_736_753_Closed_Image.style.display='inline'; Codehighlighter1_736_753_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_736_753_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_736_753_Closed_Text.style.display='none'; Codehighlighter1_736_753_Open_Image.style.display='inline'; Codehighlighter1_736_753_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;plus(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;b)&nbsp;</span><span id=Codehighlighter1_736_753_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_736_753_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/luqingfei/aggbug/73728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-02-13 17:34 <a href="http://www.cppblog.com/luqingfei/archive/2009/02/13/73728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于函数返回引用的练习</title><link>http://www.cppblog.com/luqingfei/archive/2009/02/10/73393.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Tue, 10 Feb 2009 08:52:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/02/10/73393.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/73393.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/02/10/73393.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/73393.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/73393.html</trackback:ping><description><![CDATA[题目：<br>编写一个函数，它返回两个long变量中较小值的引用。编写另一个函数，它返回较大值的引用。使用这两个函数生成斐波纳契级数的元素，即1，1，2，3，5，8，13&#8230;&#8230;序列，其中每个数都等于前两个数之和，元素的个数由用户指定（提示：把序列中的两个数字存储在n1和n2中，它们都从1开始。如果把两个数的和存储在较小的变量中，并输出较大的值，就会得到希望的结果。难点是为什么这是可行的）。<br><br>答案：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iomanip</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cout;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cin;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br><br></span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;smaller(</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;m,&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;n);<br></span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;larger(</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;m,&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;n);<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;count&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">How&nbsp;many&nbsp;values&nbsp;in&nbsp;the&nbsp;Fibonacci&nbsp;sequence&nbsp;would&nbsp;you&nbsp;like?&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;count;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;n1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1L</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;First&nbsp;in&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;n2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1L</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Second&nbsp;in&nbsp;sequence</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::setw(</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;n1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::setw(</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;n2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">count;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;smaller(n1,&nbsp;n2)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;n1&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;n2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std::setw(</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;larger(n1,&nbsp;n2);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>}<br><br></span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;smaller(</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;m,&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;n)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">m:n;<br>}<br><br></span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;larger(</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;m,&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;n)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">m:n;<br>}<br></span></div>
<br>
<img src ="http://www.cppblog.com/luqingfei/aggbug/73393.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-02-10 16:52 <a href="http://www.cppblog.com/luqingfei/archive/2009/02/10/73393.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C字符串和C++字符串</title><link>http://www.cppblog.com/luqingfei/archive/2009/02/10/73388.html</link><dc:creator>luqingfei</dc:creator><author>luqingfei</author><pubDate>Tue, 10 Feb 2009 07:41:00 GMT</pubDate><guid>http://www.cppblog.com/luqingfei/archive/2009/02/10/73388.html</guid><wfw:comment>http://www.cppblog.com/luqingfei/comments/73388.html</wfw:comment><comments>http://www.cppblog.com/luqingfei/archive/2009/02/10/73388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luqingfei/comments/commentRss/73388.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luqingfei/services/trackbacks/73388.html</trackback:ping><description><![CDATA[在C中，并没有字符串这个数据类型，而是使用字符数组来保存字符串的。<br>C字符串实际上就是一个以null（'\0'）字符结尾的字符数组，null字符表示字符串的结束。需要注意的是：只有以null字符结尾的字符数组才是C字符串，否则只是一般的C字符数组。<br><br>C字符串定义时可以利用等号（&#8220;=&#8221;）进行初始化，但是以后不能再利用等号（&#8220;=&#8221;）对C字符串进行赋值。对C字符串的操作需要通过&#8220;string.h&#8221;头文件中字义的字符串处理函数。例如：<br>//字符串的初始化<br>char str[11] = "helloworld";<br>//字符串的赋值<br>strcpy(str, "hello c");<br>//获取字符串的长度（不包括'\0'在内）<br>strlen(str);<br>//显示字符串<br>printf("%s", str);<br><br>在C中也可以使用字符指针来访问一个字符串，通过字符指针指向存放字符数组的首元素地址来进行访问。<br>char* str = "helloworld";<br>print("%s", str);<br><br><br>在C++中则把字符串封装成了一种数据类型string，可以直接声明变量并进行赋值等字符串操作。以下是C字符串和C++中string的区别：<br>
<table cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td></td>
            <td>C字符串</td>
            <td>string对象</td>
        </tr>
        <tr>
            <td>所需的头文件名称</td>
            <td>string/string.h</td>
            <td>string/string.h</td>
        </tr>
        <tr>
            <td>为什么需要头文件</td>
            <td>为了使用字符串函数</td>
            <td>为了使用string类</td>
        </tr>
        <tr>
            <td>如何声明</td>
            <td>char name[20];</td>
            <td>string name;</td>
        </tr>
        <tr>
            <td>如何初始化</td>
            <td>char name[20] = "zhangsan";</td>
            <td>string name = "zhangsan";</td>
        </tr>
        <tr>
            <td>必须声明字符串长度吗？</td>
            <td>是</td>
            <td>否</td>
        </tr>
        <tr>
            <td>需要使用一个null字符作结尾符号吗？</td>
            <td>是</td>
            <td>否</td>
        </tr>
        <tr>
            <td>怎样实现字符串赋值？</td>
            <td>strcpy(name, "lisi");</td>
            <td>name = "lisi";</td>
        </tr>
        <tr>
            <td>其他优点</td>
            <td>更快</td>
            <td>更易于使用，优选方案</td>
        </tr>
        <tr>
            <td>可以赋一个比现有字符串更长的字符串吗？</td>
            <td>不能</td>
            <td>可以</td>
        </tr>
    </tbody>
</table>
<br><br><br>
<img src ="http://www.cppblog.com/luqingfei/aggbug/73388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luqingfei/" target="_blank">luqingfei</a> 2009-02-10 15:41 <a href="http://www.cppblog.com/luqingfei/archive/2009/02/10/73388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>