⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第14章 程序的文件结构.htm

📁 用非常通俗的语言介绍了C++和C
💻 HTM
📖 第 1 页 / 共 4 页
字号:
      <P>&nbsp;&nbsp; char ch; 
      <P>&nbsp;&nbsp; int count; //求总和或平均值时,需要输入的成绩个数 
      <P>
      <P>  
      <P>&nbsp;&nbsp; do 
      <P>&nbsp;&nbsp; { 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "1)求总和" &lt;&lt; endl; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "2)求平均" &lt;&lt; endl; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "请选择(1 或 2)"; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cin &gt;&gt; ch; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输入有误,重输: 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(ch != '1' &amp;&amp; ch != '2') 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; 
      "输入有误,请重新输入!" &lt;&lt; endl; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "请输入个数:"; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cin &gt;&gt; count; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //根据用户的选择,调用不同函数: 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch(ch) 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '1' : 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      CalcTotal(count); <FONT color=#ff0000>//需要调用的函数之一</FONT> 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      break; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '2' : 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      CalcAverage(count); <FONT color=#ff0000>//需要调用的函数之一</FONT> 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      break; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //是否继续: 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "是否继续?(y/n)"; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cin &gt;&gt; ch; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //确保转换为大写: 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ch = ToUpper(ch); <FONT 
      color=#ff0000>//需要调用的函数之一</FONT> 
      <P>&nbsp;&nbsp; } 
      <P>&nbsp;&nbsp; while(ch == 'Y'); 
      <P>&nbsp;&nbsp; 
      <P>&nbsp;&nbsp; return 0; 
      <P>} 
      <P> </P>
      <P>代码中,红色部分的注释表明,主函数main()需要调用到三个自定义函数。但现在我们一个也没有定义。和往常把所有的函数定义在同一个代码文件中不同,今天我们需要把它们分开到不同的代码文件。</P>
      <P> </P>
      <P><B>第二个文件:mainfunc.cpp</B> 存放和计算有关的两个过程(函数)。</P>
      <P>先看:CalcTotal()和CalcAverage()。这两个函数我们将在mainfunc.cpp文件内定义。你可能又忘了“定义”这个术语?呵,就是“实现”,更白点,就是在mainfunc.cpp文件内“写”这两个函数。</P>
      <P> </P>
      <P>下面是mainfunc.cpp的内容。在我们输入以下代码时,mainfunc.cpp已经有了一些必要的内容,下面的代码,除了“#include 
      ..”一行在文件最首外,其它均在原有内容之后添加。</P>
      <P> </P>
      <P>#include &lt;iostream.h&gt; //在文件最首行</P>
      <P>... ...</P>
      <P>//--------------------------------------------------------------------------- 

      <P>//求总和的过程 
      <P>//参数:n 用户需要输入的个数 
      <P>void CalcTotal(int n) 
      <P>{ 
      <P>&nbsp;&nbsp; int num; 
      <P>&nbsp;&nbsp; int sum = 0; 
      <P>&nbsp;&nbsp; 
      <P>&nbsp;&nbsp; for(int i=0;i&lt;n;i++) 
      <P>&nbsp;&nbsp; { 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "请输入第" &lt;&lt; i+1 
      &lt;&lt;"个整数:"; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cin &gt;&gt; num; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum += num; 
      <P>&nbsp;&nbsp; } 
      <P>&nbsp;&nbsp; 
      <P>&nbsp;&nbsp; cout &lt;&lt; "总和为:" &lt;&lt; sum &lt;&lt; endl; 
      <P>} 
      <P>//--------------------------------------------------------------------------- 

      <P>//求平均值的过程 
      <P>//参数:n 用户需要输入的个数 
      <P>void CalcAverage(int n) 
      <P>{ 
      <P>&nbsp;&nbsp; int num; 
      <P>&nbsp;&nbsp; int sum = 0; 
      <P>&nbsp;&nbsp; float ave; 
      <P>
      <P>&nbsp;&nbsp; for(int i=0;i&lt;n;i++) 
      <P>&nbsp;&nbsp; { 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "请输入第" &lt;&lt; i+1 
      &lt;&lt;"个整数:"; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cin &gt;&gt; num; 
      <P>&nbsp;&nbsp; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum += num; 
      <P>&nbsp;&nbsp; } 
      <P>
      <P>&nbsp;&nbsp; //注意不要除0出错: 
      <P>&nbsp;&nbsp; if( n &gt;=0 ) 
      <P>&nbsp;&nbsp; { 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ave = (float)sum / n; 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "平均值:" &lt;&lt; ave 
      &lt;&lt; endl; 
      <P>&nbsp;&nbsp; } 
      <P>&nbsp;&nbsp; else 
      <P>&nbsp;&nbsp; { 
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "个数为0,不能求平均。" &lt;&lt; 
      endl; 
      <P>&nbsp;&nbsp; } 
      <P>} 
      <P>//--------------------------------------------------------------------------- 

      <P>  
      <P><B>第三个文件:assifunc.cpp</B> 用以存放辅助作用的函数,现在只有一个。 
      <P>现在还差一个函数:ToUpper()。这个函数用来将用户输入的某个小写字母转换为大写。当然,如果用户输入的不是小写字母,那就不用转换。和上面的两个函数不同,它需要返回值。 

      <P>我们把ToUpper()函数单独放在assifunc.cpp里。同样,下面的代码加在该文件中原有的代码之后。不过本文件不需要include 
      &lt;iostream.h&gt; ,因为没有用到 cin,cout等。 
      <P>  
      <P>//小写字母转换为大写 </P>
      <P>//参数: c 待转换的字符 </P>
      <P>//返回值: 转换后的字符,如果原字符不是小写字母,则为原字符</P>
      <P>char ToUpper(char c) </P>
      <P>{ </P>
      <P>&nbsp;&nbsp; int ca = 'A' - 'a'; //大写字母和小写字母之间差距多少?<BR><BR></P>
      <P>&nbsp;&nbsp; if(c &gt;= 'a' &amp;&amp; c &lt;= 'z') </P>
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c += ca;<BR> </P>
      <P>&nbsp;&nbsp; return c; </P>
      <P>}</P>
      <P>  
      <P>至此,所有自定义函数都已完成<B>定义</B>(实现),而三个文件的主要内容也以确定。让我们看看示意图: 
      <P>  
      <P><IMG src="第14章 程序的文件结构.files/ls14.h4.gif" border=0></P>
      <P> </P>
      <P>main.cpp中的main()函数调用了三个函数。回忆我们学习过的“如何调用函数”的知识,当前代码在调用一个函数时,必须能“看到”这个函数。尽管CalcTotal()、CalcAverage()、ToUpper()三个函数所在文件都在同一工程里,但是在main.cpp里的代码,还是看不到它们。想一想我们以前说的“请修理工”的比喻。现在情况是:在你所住的小区,甚至就是同一楼道里,就有一个电视修理工,但可惜你们互不认识,所以当你电视坏了,想“调用”一个修理工时,你还是找不到修理工。哎!要是有它的名片就好了。</P>
      <P>让我们试试看,按Ctrl + F9,编辑该工程。出错!</P>
      <P><IMG src="第14章 程序的文件结构.files/ls14.h5.gif" border=0></P>
      <P>正好是三个错。分别告诉我们调用了三个没有定义的函数(Call to undefined function ...)。</P>
      <P> </P>
      <P>(如果你出现的是一堆错,那有可能是你没有在前两个文件内最首行写:</P>
      <P>“#include &lt;iostream.h&gt;”</P>
      <P>或者是你有些代码输入有误。)</P>
      <P> </P>
      <P>如何消除这三个错?两种方法。</P>
      <P>第一种方法就是以前我们在讲“如何调用函数”的时候所说的,直接在调用直接声明要调用的函数。这里写出代码,算做是一次复习,然后我们将讲该方法不好之处。</P>
      <P> </P>
      <P>在 main.cpp 的 main()函数之前加入如下三行函数声明:</P>
      <P> </P>
      <P><B>void CalcTotal(int n);</B></P>
      <P><B>void CalcAverage(int n);</B></P>
      <P><B>char ToUpper(char c);</B></P>
      <P> </P>
      <P>int main(int argc, char* argv[])</P>
      <P>{</P>
      <P>&nbsp;&nbsp; ... ...</P>
      <P>}</P>
      <P> </P>
      <P>(上例中,尽管你可以将三行函数声明写在 main()函数体内,但不建议这样做)。</P>
      <P> </P>
      <P>如果你一切输入正确的话,现在按Ctrl + F9 或 F9将可以完成编译或运行。</P>
      <P>对于现在这个工程,这种方法确实也不能指责它有何不利之处。问题在于,如果我们还有其它文件中代码需要调用到这三个函数,我们就不得不在其它文件中也一一写上这三行声明。所以另一种方法是:把源文件中需要对外“共享”的函数声明统一写到某个头文件,然后凡是需要用到的其它文件,直接使用“#include"语句来包含该头文件,从而获得这些函数声明。</P>
      <P> </P>
      <H3><A name=14.3>14.3</A> 如何写头文件</H3>
      <P> </P>
      <P>在CB中,如果你通过上小节的方法新建个单元文件,那么CB将自动同时生成源文件和头文件。其实在CB里,源文件和头文件合称为单元文件,它们有相同的文件名,而扩展名一者为.cpp,另一为.h。</P>
      <P> </P>
      <H4><A name=14.3.1>14.3.1</A> 在头文件内加入函数声明</H4>
      <P> </P>
      <P><B>头文件:mainfunc.h</B></P>
      <P>CalcTotal()和CalcAverage()函数定义在 
      mainfunc.cpp文件里,所以它们的声明最好写在对应的头文件mainfunc.h内。</P>
      <P>下面我们就来看如何在头文件mainfunc.h 内增加函数声明。</P>
      <P>一开始,头文件内有以下这些代码。另外,我增加了一行用于标明我们新加的代码应写在哪里。</P>
      <P>//---------------------------------------------------------------------------<BR><BR></P>
      <P>#ifndef mainfuncH </P>
      <P>#define mainfuncH </P>
      <P>//--------------------------------------------------------------------------- 
      </P>
      <P><FONT color=#ff0000>/* !!!头文件中,我们新增的代码必须写在此处!!!&nbsp; */</FONT></P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -