一、函数的介绍
在过程化编程中, 为了将一个较大的功能顺利实现, 通常会将这个大的功能进行分解, 例如要实现一个学生信息管理系统, 一个学生信息管理系统至少包括学生信息的 添加、查询、删除、修改 等功能, 这些功能要求就是对该系统的初步分解, 然后以 查询 功能为例对其继续分解, 查询 功能可以再次分解为由以下几个功能组成的模块: ①. 获取用户查询条件 ; ②. 到数据库查询该学生信息 ; ③. 按照一定格式输出查询结果。 如果感觉该功能实现起来还是比较困难那么就继续分解, 直到可以顺利实现。这些功能分解后的实现就是依靠函数, 函数在广义上理解为具有具体功能的一个模块, 在函数实现后, 通过对函数的调用来使用这个功能。
二、函数的调用过程 在任何一个有效的C++程序中, 都有一个被称为主函数的函数 - main(), 该函数又被称为C++程序的入口函数, 该函数的作用是告诉程序应该从这里开始执行指令, 也就是说, 任何一个C++程序都是从 main() 函数处开始执行, 直到执行过程中遇到程序的结束指令。 C++中, 函数的之间可以互相调用, 不存在函数的等级关系而导致的不行调用的情况。 也就是说, main函数可以调用任何函数, 也包括自身; 自定义的函数可以调用其他自定义的函数, 或者库函数, 自定义函数同样也可以调用main函数。 其一般的调用关系如图: 对图示中的解说: 在该图示中, 用箭头来描述调用关系, 箭头指向谁就表明谁被调用, 箭头的尾部是指函数在那里被使用。可以看到, 图中 main() 函数一共调用了 函数1()、函数2()、 ... 函数n()这些函数, 而 函数1() 的实现又调用了 函数3, 函数3 的实现又调用了 函数2 才得以完成。函数2被重复调用了两次, 一次是在 main() 函数中, 一次是在函数3()中, 相当于被重复利用了两次。 在这个图示中就体现出了使用函数的另一个优势, 代码可以反复利用, 把一些简单基础的功能写成一个函数, 什么时候使用就什么时候调用, 不必再麻烦的写一次。
三、一个函数的示例 这里举例通过调用一个函数来输出"hello, world":
1 #include2 3 using namespace std; 4 5 //定义sayHello函数 6 void sayHello() 7 { 8 //大括号里面为函数功能的实现 9 cout<<"Hello, world!\n" ;10 }11 12 int main()13 {14 sayHello() ; //调用自定义的sayHello函数15 16 return 0 ;17 }
四、函数的定义以及调用 一个函数的定义是有函数头与函数实现部分组成, 一般形式如下: 返回值类型 函数名(参数列表) { 函数体 } 1>. 返回值类型 函数在执行完毕后会返回一个值表示函数已经执行完毕, 这个值可以是随便定义的一个值, 也可以是函数经过计算/操作后得到的结果, 他可以是 char、int、float、double、指针类型等, 也可以是后面将会学到的自定义数据类型。 要返回某个值需要用 return 语句; 来进行返回。 当函数执行到 return 语句时会返回一个值并结束函数的执行, 即使后面还有语句也不会再执行了。 例如我们把上面那个sayHello函数改成有返回值类型的如下:
1 #include2 3 using namespace std; 4 5 //定义sayHello函数 6 int sayHello() 7 { 8 //大括号里面为函数功能的实现 9 cout<<"Hello, world!\n" ;10 return 100 ; //执行完毕时返回值10011 cout<<"succeed!\n" ;12 13 }14 15 int main()16 {17 int val = 0;18 val = sayHello() ; //调用自定义的sayHello函数, 把返回值赋值给变量val19 cout<<"Return Value: "< <
输出:
Hello, world! Return Value: 100 Process returned 0 (0x0) execution time : 0.594 s Press any key to continue.
1 #include2 3 using namespace std; 4 5 //定义max函数 6 void max(int a, int b) //int a, int b即为参数列表 7 { 8 if(a>b) 9 cout<< a << endl ;10 else11 cout<< b << endl ;12 }13 14 int main()15 {16 int x = 10, y = 20 ; //待比较的数17 max(x, y) ; //调用并传入x和y的值18 19 return 0;20 }
main函数中调用max函数传入的为x, y, 这里x, y称为实参。所以在该程序中, 参数列表中a的值就是x的值, b的值就是y的值, 因此我们就可以在函数体内根据a, b的值判断x, y谁大谁小。
来源:http://www.cnblogs.com/mr-wid/archive/2013/01/23/2874082.html