C++开篇(八):默认参数与函数重载

1、默认参数
1)形式:
int Add(int a = 1, int b = 2, int c = 3)
{
    return a + b + c;
}
【说明】:必须从右向左添加默认值,以下是无效的
//int AddWrong(int a = 1, int b, int c = 3);


2)使用:
cout << Add(4) << endl;    // 9
cout << Add(4, 4) << endl; // 11
cout << Add(4, 4, 4) << endl;  //12
【说明】:参数赋值从左向右。
【错误使用】:
//cout << Add(4 , , 2) << endl;    //Invalid


【说明】:默认参数可以使用不同数目的参数调用同一个函数,而函数重载能够使用多个同名的函数。


2、函数重载
1)定义两个函数,两个函数参数个数不同,其中一个存在默认参数,
int Add(int a = 1, int b = 2, int c = 3)
{
    return a + b + c;
}


int Add(int x, int y)
{
    return x + y;
}


在调用:Add(4, 4)时会报错,因为编译器不知道应该调用哪个函数


2)函数参数个数相同,其中一个引用
int Sub(int x, int y)
{
    std::cout << "Sub(int x, int y)" << std::endl;
    return x - y;
}


int Sub(int& x, int& y)
{
    std::cout << "Sub(int& x, int& y)" << std::endl;
    return x - y;
}


调用:Sub(1,2);走到的是int Sub(int x, int y)。
【说明】:尽量避免这种编程方法,原因:
(1)有可能不能获取想要的结果。
(2)如果是这样:
    int a = 1;
    int b = 2;
    cout << Sub(a, b) << endl;
那么编译就会报错。


3)函数参数个数相同,其中一个为const(int)
int Sub(int x, int y)
{
    std::cout << "Sub(int x, int y)" << std::endl;
    return x - y;
}


int Sub(const int x, const int y)
{
    std::cout << "Sub(const int x, const int y)" << std::endl;
    return x - y;
}
调用:Sub(1,2);会报错。


4)函数参数个数相同,其中一个为const(char*)
void TestChar(char* input_char)
{
    std::cout << "TestChar(char* input_char)" << std::endl;
}


void TestChar(const char* input_char)
{
    std::cout << "TestChar(const char* input_char)" << std::endl;
}


    char array_a[10] = "hello";
    const char array_b[10] = "hello";
    TestChar(array_a);
    TestChar(array_b);

上面的代码能够正常运行。那么根据4)将3)进行改造,使用指针是否有效?


5)函数参数个数相同,其中一个为const(int*)
int Sub(int* x, int* y)
{
    std::cout << "Sub(int* x, int* y)" << std::endl;
    return *x - *y;
}


int Sub(const int* x, const int* y)
{
    std::cout << "Sub(const int* x, const int* y)" << std::endl;
    return *x - *y;
}


int a = 1;
int b = 2;
cout << Sub(&a, &b) << endl;
    const int c = 1;
    const int d = 2;
    cout << Sub(&c, &d) << endl;
上面的代码能够正常运行。
【说明】:对于定义的指针变量,如果两个函数入参存在const的区别,C++编译器是能够很好的区分。


6)指针可以,那么引用呢?
int Mul(int& x, int& y)
{
    std::cout << "Mul(int& x, int& y)" << std::endl;
    return x * y;
}


int Mul(const int& x, const int& y)
{
    std::cout << "Mul(const int& x, const int& y))" << std::endl;
    return x * y;
}


    int mul1 = 1;
    int mul2 = 2;
    int const mul3 = 1;
    int const mul4 = 2;
    cout << Mul(mul1, mul2) << endl;
    cout << Mul(mul3, mul4) << endl;
以上代码可以正常运行。
【说明】:对于引用来说,如果两个函数入参存在const的区别,C++编译器是能够很好的区分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值