美文网首页
C++入坑记(2)

C++入坑记(2)

作者: yeshan333 | 来源:发表于2018-10-06 20:44 被阅读4次

    一般函数

    在C++中,允许在自定义函数的形参列表中,给形参一个默认的值,这样在调用的时候如果有实参,那么按照实参传递给形参的方法使用;若调用的时候没有指定对应的实参,则形参将使用默认值。
    由于参数的传递顺序是从右至左入栈,所以有默认值的参数必须在放在形参列表的最右边!

    #include<iostream>
    using namespace std;
    int Sum(int a=4,int b=5)
    {
        return a+b;
    }
    int main()
    {
        cout<<Sum(5,7)<<endl;
        cout<<Sum()<<endl;
        cout<<Sum(9)<<endl;
        return 0;
    }
    
    image

    函数重载

    函数重载即两个或以上的函数,函数名相同,但形参类型或个数不同,编译器根据调用方传入的参数的类型和个数,自动选择最适合的一个函数来进行绑定调用,自动实现选择。

    #include<iostream>
    using namespace std;
    int sum(int a,int b)
    {
        return a+b;
    }
    
    double sum(double a,double b)
    {
        return a+b;
    }
    
    double sum(double a,int b)
    {
        return a+b;
    }
    
    double sum(int a,double b)
    {
        return a+b;
    }
    
    int main()
    {
        cout<<sum(1,2)<<endl;
        cout<<sum(1.414,2.526)<<endl;
        cout<<sum(3.14,6)<<endl;
        cout<<sum(8,9.9)<<endl;
        return 0;
    }
    
    image

    函数模板(template)

    模板是创建泛型类或函数的蓝图或公式。是泛型编程的基础。
    函数模板,是可以创建一个通用的函数,可以支持多种形参。用关键字template来定义
    模板函数定义的一般形式

    template<class 类型名1,class 类型名2>
    返回值 函数名(形参列表)
    {
        函数体
    }
    
    #include<iostream>
    using namespace std;
    template<class T1,class T2>
    T1 sum(T1 a,T2 b)
    //模板函数中的T1和T2类型将根据实际传入的类型变成具体类型。这个化成就叫做模板的实例化。
    //T1、T2是函数所使用的数据类型的占位符名称。这个名称可以在函数定义中使用。 
    {
        cout<<sizeof(T1)<<","<<sizeof(T2)<<"\t";
        return a+b;
    }
    int main()
    {
        cout<<sum(1,2)<<endl;
        cout<<sum(3.14,1.414)<<endl;
        cout<<sum('A',2)<<endl;
        return 0;
    }
    
    image

    inline内联函数

    • 内联函数的基本思想在于将每个函数调用都以它的代码体来替换
    • 内联函数减少了不必要的函数栈帧的开销,节约内存
    • 内联函数以空间换取了时间,但是inline对编译器只是一个建议,如果定义的函数体内有循环或递归等,编译器优化时会自动忽略掉内联
    #include<iostream>
    using namespace std;
      
    inline int Max(int a,int b)
    {
        return a>b?a:b;
    }
    int main()
    {
        cout<<Max(3,5)<<endl;
        cout<<Max(7,9)<<endl;
        return 0;
    }
    

    内联函数的定义要在调用之前出现

    相关文章

      网友评论

          本文标题:C++入坑记(2)

          本文链接:https://www.haomeiwen.com/subject/qzzhaftx.html