• C++函数三(内联函数和函数重载)


    内联函数,是为了解决程序中函数调用的效率问题。函数重载允许程序员定义函数时使用相同的函数名,以不同数据类型的数据作为形参,实现相似功能的函数。

    内联函数

    调用函数时,系统要将程序当前的一些状态信息、断点信息保存到堆栈中,同时转到被调函数的代码处去执行函数体语句,这些参数保存与参数恢复的过程需要时间和空间开销,使程序执行效率降低。为此才引入内联函数。
    内联函数也称为内嵌函数,在使用内联函数时,C++编译器直接将被调函数的函数的代码插入到调用该函数的语句处,在程序运行时不再进行函数调用和返回,从而消函数调用和返回的系统开销,提高了程序执行效率

    格式inline  类型标识符  函数名(参数列表)
    内联函数的定义与普通函数基本相同,只是在函数定义前加上关键字 inline。

    实例

    #include<iostream>
    
    using namespace std;
    
    inline double sqr(double x)
    
    {
    
    return x * x;
    
    }
    
    inline double cube(double x)
    
    {
    
    return x * x*x;
    
    }
    
    int main()
    
    {
    
    double x;
    
    cout << "请输入一个数据" << endl;
    
    cin >> x;
    
    cout << "square of" << x << "=" << sqr(x) << endl;
    
    cout << "cube of" << x << "=" << cube(x) << endl;
    
    system("pause");
    
    return 0;
    
    }

     内联函数不同于一般函数调用,主要体现在是代码替换而不是调用,减少了函数调用时的系统开销,提高了效率

    注意:(1)内联函数的函数体内不允许有循环语句和开关 switch语句。如果内联函数内含有这些语句,则按普通函数处理。
               (2)内联函数的函数体内不能包含任何静态变量和数组说明,也不能有递归调用。
               (3)内联函数的函数体中语句不宜过多,一般以1-5行为宜。

    函数重载

    C++中允许两个或两个以上的函数在定义时重名,但要求函数的参数列表不同,如参数的类型不同、参数的个数不同等。这种共享同名函数的定义称为函数重载。重载函数的意义在于,可以用同一个函数名字定义和调用多个功能相近的函数,编译器能够根据函数参数的具体情况决定调用哪个函数。

    实例使用函数重载的方法,设计两个求面积的函数:
     area(float r); //求圆面积,需传递一个参数

    area(float x,float y); //求矩形面积,需传递两个参数

    #include<iostream>
    using namespace std;
    const double PI = 3.14159;
    double  area(float r)
    {
        return (PI*r*r);
    }
    double  area(float x,float y)
    {
        return (x*y);
    }
    int main()
    {
        float r,a,b;
        cout << "输入圆的半径" << endl;
        cin >> r;
        cout << "圆的面积:" << area(r) << endl;
        cout << "输入矩形长宽" << endl;
        cin >> a>> b;
        cout << "矩形的面积:" << area(a, b) << endl;
        system("pause");
        return 0;
    }

     注意:(1)重载函数的区别不能只是函数的返回值不同个,应至少在形参个数,参数类型,参数顺序上有所不同。

                (2)应使所有的重载函数的功能相同。

  • 相关阅读:
    Shodan新手入坑指南
    linux 下查看网卡工作速率
    centos关闭ipv6
    springBoot----@ConditionalOnxxx相关注解总结
    ElasticSearch Root身份运行
    CentOS6 Install kafka
    CentOS 7 中firewall-cmd命令
    sensu
    metrics+spring+influxdb
    SpringBoot(十二):SpringBoot整合Kafka
  • 原文地址:https://www.cnblogs.com/CX66/p/13911068.html
Copyright © 2020-2023  润新知