后台开发:核心技术与应用实践1.2 函数

    xiaoxiao2024-03-17  17

    1.2 函数

    1.?函数的定义

    一个C程序是由若干个函数组成的,C语言被认为是面向函数的语言,而C++面向过程的程序设计也沿用了C语言使用函数的方法。在C++面向对象的程序设计中,主函数以外的函数大多是被封装在类中的。主函数或其他函数可以通过类对象调用类中的函数。无论是C还是C++,程序中的各项操作基本上都是由函数来实现的,程序编写者要根据需要编写一个个函数,每个函数用来实现某一功能。因此,读者必须掌握函数的概念以及学会使用和设计函数。

    定义函数的一般格式是:

    返回值类型 函数名([形参])

    {

        函数体

    }

    在定义函数时函数名后面括号中的变量名称是形参。在主调中调用一个函数时,函数名后面括号中的参数是实参。

    【例1.2】 函数、形参、实参的使用举例。

    #include<iostream>

    using namespace std;

    int min(int a,int b){              // 这里的min就是函数名,a、b是形参,

                                      // 返回值是一个int整型

        if(a<b)return a;

        else return b;

    }

    int main(){

        int a=10,b=1;

        cout<<min(a,b)<<endl;            // 这里的a、b是实参

        return 0;

    }

    函数的执行结果是:

    1

    例1.2中定义了一个函数,有2个整型的参数,且返回值是整型的,在main函数中调用min函数时,传入的是实参。

    形参与实参的区别是:形参只有被调用时才分配内存单元,在调用结束时,立即释放所分配的内存单元。实参与形参的类型应相同或赋值兼容。

    2.?函数重载

    C++允许用同一函数名定义多个函数,但这些函数必须参数个数不同或类型不同,这就是函数重载。例1.3说明了函数重载的使用方法。

    【例1.3】 求不同类型的数中的最小者。

    #include<iostream>

    using namespace std;

    int min(int a, int b, int c){

        if(a>b)a=b;

        if(a>c)a=c;

        return a;

    }

    long long min(long long a,long long b, long long c){

                                      // 与上面那个函数的差别是参数的类型不同

        if(a>b)a=b;

        if(a>c)a=c;

        return a;

    }

    double min(double a, double b){      // 这个函数与以上的差别是只有2个参数

        if(a-b>(1e-5))a=b;

        return a;

    }

    int main(){

        int a=1,b=2,c=3;

        cout<<min(a,b,c)<<endl;

        long long a1=100,b1=200,c1=300;

        cout<<min(a1,b1,c1)<<endl;

        double a2=1.1,b2=2.2;

        cout<<min(a2,b2)<<endl;

        return 0;

    }

    程序的执行结果是:

    1

    100

    1.1

    这里分别需要比较3个整数、3个长整数和2个浮点数,并获得各组中的最小值。例1.3中分别定义了3个函数,而且函数名都是一样的,不过参数个数不一样或者参数类型不一样,这就是使用了函数重载来实现功能。

    在使用函数重载时,同名函数的功能应当相同或相近,不要用同一函数名去实现几个完全不相干的功能,这样虽然程序能运行,但是可读性不好,会让人觉得莫名其妙。

    3.?函数模板

    函数模板,实际上是建立一个通用函数,其函数类型和形参不具体指定,而用一个虚拟的类型来代表,这个通用函数就是函数模板。凡是函数体相同的函数都可以用这个模板来代替,而不用定义多个函数,实际使用时只需在模板中定义一次就可以了。在调用函数时,系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同函数的功能。

    定义函数模板的一般格式是:

    template<typename T>

    下面的程序说明了函数模板的使用方法。

    【例1.4】 函数模板使用举例。

    #include<iostream>

    using namespace std;

    template<typename T>

    T min(T a,T b,T c){

        if(a>b)a=b;

        if(a>c)a=c;

        return a;

    }

    int main(){

        int a=1,b=2,c=3;

        cout<<min(a,b,c)<<endl;

        long long a1=1000000000,b1=2000000000,c1=3000000000;

        cout<<min(a1,b1,c1)<<endl;

        return 0;

    }

    程序输出结果:

    1

    1000000000

    例1.4中定义了一个函数模板,用来获得3个数中的最小者。若传入3个整型的,函数就将虚拟类型T转成int去执行;若传入3个长整型的,函数就将T转化成long long去执行。这样就可以不用定义类型不同的函数了,只需一个函数模板即可搞定。

    在编写函数模板时,可以先写一个函数,然后把其中的变量类型都替换成虚拟类型即可。可以看到,用函数模板比函数重载更方便,但是它只适用于函数个数相同而类型不同的情况。

    相关资源:TCP/IP网络互联技术(卷3):客户-服务器编程与应用(Windows套接字版)--详细书签版
    最新回复(0)