函数重载

1.函数重载概念

函数重载(Function Overload)

用同一个函数名定义不同的函数

当函数名和不同的参数搭配时函数的含义不同

2 .函数重载的判断标准 

函数重载至少满足下面的一个条件: 

参数个数不同 

参数类型不同 

参数顺序不同 

3 .函数返回值不是函数重载的判断标准 

4 .编译器调用重载函数的准则 

    将所有同名函数作为候选者 

    尝试寻找可行的候选函数  

    精确匹配实参 

    通过默认参数能够匹配实参 

    通过默认类型转换匹配实参 

    匹配失败 

    最终寻找到的可行候选函数不唯一,则出现二义性,编译失败。 

    无法匹配所有候选者,函数未定义,编译失败。

函数重载的注意事项

重载函数在本质上是相互独立的不同函数(静态链编)

重载函数的函数类型是不同的

函数返回值不能作为函数重载的依据

函数重载是由函数名和参数列表决定的。

#include <iostream>
using namespace std;

void myPrint(int a)
{
    cout<<"a="<<a<<endl;
}

void myPrint(const char *p)
{
    //cout<<"p="<<p<<endl;
    printf("%s 
",p);
}

void myPrint(int a,int b)
{
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
}

/*
//返回值 不是 判断函数重载的标准
int myPrint(int a,int b)
{
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
}
*/

//1 当函数名和不同的参数搭配时函数的含义不同
//2 函数重载的判断标准
//参数个数不同
//参数类型不同 
//参数顺序不同

//3 返回值 不是 判断函数重载的标准

//4 重载函数的调用标准

int main(void)
{
    myPrint(1);
    myPrint("11122222333aaa");
    myPrint(1,2);
    
    return 0;
}

函数默认参数 和 函数重载 在一起  可能会产生二义性

k//函数默认参数 和 函数重载 在一起
void myfunc(int a,int b,int c=0)
{
    cout<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;
}

void myfunc(int a,int b)
{
    cout<<"a:"<<a<<"b:"<<b<<endl;
}

void myfunc(int a)
{
    cout<<"a:"<<a<<endl;
}

int main(void)
{
    //myfunc(1,2); //函数调用时 会产生二义性
    myfunc(1);
    return 0;
}

 

  

原文地址:https://www.cnblogs.com/Liu-Jing/p/9694004.html