C++函数重载的4种错误示例

函数重载的4种错误示例:

#include <iostream>
#include <string>

using namespace std;

//函数重载  同函数名,函数重载有3种情况:参数类型不同、参数个数不同、参数顺序不同

//1.不能根据返回类型作为重载的依据
#if 0
int add(int num1,int num2)
{
    cout << "int add(int num1,int num2)" << endl;
    return num1+num2;
}
#endif
//--
#if 0
float add(int num1,int num2) //error: 只是返回类型不同,函数名、参数都一致,则不能算作重载,int add()和float add()一起出现会报错,故用#if屏蔽
{
    cout << "float add(float num1,float num2)" << endl;
    return num1+num2;
}
#endif

#if 0
//2.存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数
long add(long num1,long num2)
{
    cout << "long add(long num1,long num2)" << endl;
    return num1+num2;
}
double add(double num1,double num2)
{
    cout << "double add(double num1,double num2)" << endl;
    return num1+num2;
}
#endif

//3.存在二义性,因为int可以赋给int,也可以赋给const int&,也可以赋给int&,编译器不知道应该调用哪个函数
#if 0
int add(int num1,int num2)
{
    cout << "int add(int num1,int num2)" << endl;
    return num1 + num2;
}
//--
int add(const int &num1,const int &num2)    //重载了第1个add函数
{
    cout << "int add(const int &num1,const int &num2)" << endl;
    return num1 + num2;
}
//--
int add(int &num1,int &num2)    //重载了第1个add函数
{
    cout << "int add(int &num1,int &num2) " << endl;
    return num1 + num2;
}
#endif

//4.存在二义性,编译器不知道应该调用哪个函数
int add(int num1,int num2)
{
    cout << "int add(int num1,int num2)" << endl;
    return num1+num2;
}
//--
int add(int num1,int num2=0,int num3=0)
{
    cout << "int add(int num1,int num2=0,int num3=0)" << endl;
    return num1+num2+num3;
}

int main()
{
    //1.不能根据返回类型作为重载的依据
    #if 0
    int res;
    res = add(1,2); //error,存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数
    #endif

    //2.存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数
    #if 0
    int num1,num2;
    long res;
    //res = add(num1,num2); //error,存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数
    #endif

    //3.存在二义性,因为int可以赋给int,也可以赋给const int&,也可以赋给int&,编译器不知道应该调用哪个函数
    #if 0
    int res;
    res = add(1,2); //erroe:存在二义性,编译器不知道应该调用哪个函数
    #endif

    //4.存在二义性,编译器不知道应该调用哪个函数
    int res;
    //res = add(1,2); //error:存在二义性,编译器不知道应该调用哪个函数
}

转载于:https://www.cnblogs.com/linuxAndMcu/p/8353418.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值