代码改变世界

学习C++ -> 函数( Function )

2013-01-23 23:36  wid  阅读(15993)  评论(0编辑  收藏  举报

学习C++ -> 函数( Function )

 



一、函数的介绍
    在过程化编程中, 为了将一个较大的功能顺利实现, 通常会将这个大的功能进行分解, 例如要实现一个学生信息管理系统, 一个学生信息管理系统至少包括学生信息的 添加查询删除修改 等功能, 这些功能要求就是对该系统的初步分解, 然后以 查询 功能为例对其继续分解, 查询 功能可以再次分解为由以下几个功能组成的模块:
    
        ①. 获取用户查询条件 ;
        ②. 到数据库查询该学生信息 ;
        ③. 按照一定格式输出查询结果。
        
    如果感觉该功能实现起来还是比较困难那么就继续分解, 直到可以顺利实现。这些功能分解后的实现就是依靠函数, 函数在广义上理解为具有具体功能的一个模块, 在函数实现后, 通过对函数的调用来使用这个功能。
    
    

 

 


二、函数的调用过程
    在任何一个有效的C++程序中, 都有一个被称为主函数的函数 - main(), 该函数又被称为C++程序的入口函数, 该函数的作用是告诉程序应该从这里开始执行指令, 也就是说, 任何一个C++程序都是从 main() 函数处开始执行, 直到执行过程中遇到程序的结束指令。
    
    C++中, 函数的之间可以互相调用, 不存在函数的等级关系而导致的不行调用的情况。 也就是说, main函数可以调用任何函数, 也包括自身; 自定义的函数可以调用其他自定义的函数, 或者库函数, 自定义函数同样也可以调用main函数。
    
    其一般的调用关系如图:


    
    对图示中的解说:
        在该图示中, 用箭头来描述调用关系, 箭头指向谁就表明谁被调用, 箭头的尾部是指函数在那里被使用。可以看到, 图中main()函数一共调用了 函数1()、函数2()、...函数n()这些函数, 而 函数1() 的实现又调用了 函数3, 函数3 的实现又调用了 函数2 才得以完成。函数2被重复调用了两次, 一次是在 main() 函数中, 一次是在函数3()中, 相当于被重复利用了两次。
        
        在这个图示中就体现出了使用函数的另一个优势, 代码可以反复利用, 把一些简单基础的功能写成一个函数, 什么时候使用就什么时候调用, 不必再麻烦的写一次。
        
        

 

 


三、一个函数的示例
    这里举例通过调用一个函数来输出"hello, world":

 1     #include<iostream>
 2 
 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     }


    编译运行后将在屏幕上输出"hello, world", 与直接在main函数中使用cout输出的结果相同。 在这个示例中, 我们定义了名为 sayHello 的函数, 名字的前面 void 是他的返回值类型,  紧跟着后面的大括号中的内容就是该函数具体的实现过程, 也称为函数体, 由于我们给该函数的功能为在屏幕上输出 "hello, world" 即可, 所以函数体内只写了一行 cout<<"Hello, world!\n" ;
    
    定义完sayHello函数就可以在main函数中调用了, 调用的过程很简单, 函数名加一对小括号再加上后面的分号即可。
    
    

 

 


四、函数的定义以及调用
    一个函数的定义是有函数头与函数实现部分组成, 一般形式如下:
        返回值类型 函数名(参数列表)
        {
            函数体
        }
        
    1>. 返回值类型
        函数在执行完毕后会返回一个值表示函数已经执行完毕, 这个值可以是随便定义的一个值, 也可以是函数经过计算/操作后得到的结果, 他可以是 char、int、float、double、指针类型等, 也可以是后面将会学到的自定义数据类型。
        
        要返回某个值需要用 return 语句; 来进行返回。 当函数执行到 return 语句时会返回一个值并结束函数的执行, 即使后面还有语句也不会再执行了。
        例如我们把上面那个sayHello函数改成有返回值类型的如下:

 1         #include<iostream>
 2 
 3         using namespace std;
 4 
 5         //定义sayHello函数
 6         int sayHello()
 7         {
 8             //大括号里面为函数功能的实现
 9             cout<<"Hello, world!\n" ;
10             return 100 ;    //执行完毕时返回值100
11             cout<<"succeed!\n" ;
12 
13         }
14 
15         int main()
16         {
17             int val = 0;
18             val = sayHello() ;        //调用自定义的sayHello函数, 把返回值赋值给变量val
19             cout<<"Return Value: "<<val<<endl ;     //输出sayHello函数的返回值
20 
21             return 0;
22         }

 
    输出:

        Hello, world!
        Return Value: 100

        Process returned 0 (0x0)   execution time : 0.594 s
        Press any key to continue.


        这次把 sayHello 函数的返回类型改为了int, 其返回值为100, 并且我们还是 return 语句后加了一句 cout<<"succeed!\n" ; 用于判断函数执行到return语句时是否真的结束了, 根据输出结果来看, 真的结束了, 后面的 "succeed!" 没有被输出 。
        
        在main函数中定义了一个int型(与返回值类型一致)的变量val用来保存sayHello函数的返回值, 并将他输出。
        
    2>. 函数名
        函数名只要符合C++标识符定义的要求即可, 即只能以字母、数字、下划线组成, 并且不能以数字开头。在符合要求的基础上尽量让命名简洁明确, 最好能让人一看函数名就能大致猜测出该函数的功能是什么。
        
    3>. 参数列表
        参数列表是用来向函数内传递信息, 比如要要函数来比较两个数的大小, 并输出较大的那个, 不让函数知道哪两个数怎么行。
        例: 向函数传递两个int型值输出较大的一个
        

 1         #include<iostream>
 2 
 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             else
11                 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         }


    在声明参数列表时, int a, int b, 为两个int型, 表示将要传入两个参数, 传入的第一个参数将由a表示, a的值就是传进来的第一个参数的值; 第二个参数由b表示, 同样, b的值就是传进来第二个参数的值, a、b称为形参, 也称"形式参数"。


    main函数中调用max函数传入的为x, y, 这里x, y称为实参。所以在该程序中, 参数列表中a的值就是x的值, b的值就是y的值, 因此我们就可以在函数体内根据a, b的值判断x, y谁大谁小。
       


    
今天主要学习了有关函数的一些基础知识, 明天将继续对函数进行进一步的学习。
    
    

 

命运如同手中的掌纹,无论多么曲折,但终掌握在自己手中。   


--------------------



wid, 2013.01.23



上一篇: 学习C++ -> 引用( References )