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

