📜  C++ |函数重载和默认参数问题5(1)

📅  最后修改于: 2023-12-03 15:29:51.910000             🧑  作者: Mango

C++ | 函数重载和默认参数问题

在C++中,函数重载和默认参数是两个重要概念。函数重载允许在同一作用域内定义多个具有相同名称但参数不同的函数,而默认参数则是可以为函数的参数指定一个默认值。下面是相关内容的详细介绍。

函数重载

函数重载是指在同一个作用域内,可以定义多个函数名相同但参数列表不同的函数,这些函数被称为“重载函数”,编译器会根据调用时的参数类型、数量、顺序等信息选择最佳匹配的函数进行调用。

函数参数的不同形式

函数参数的不同形式包括:参数个数、参数类型、参数顺序

参数个数不同

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

int sum(int x, int y, int z) {
    return x + y + z;
}

参数类型不同

double sum(double x, double y) {
    return x + y;
}

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

参数顺序不同

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

int sum(double x, int y) {
    return x + y;
}
注意事项

函数重载有几个需要注意的事项:

  1. 只有在同一个作用域内进行函数重载,不同作用域内的同名函数不算重载;

  2. 重载函数的返回值类型可以相同也可以不同;

  3. 重载函数不能仅通过参数类型的区别来区分,如下面的例子:

void print(int x) {
    cout << "print int: " << x << endl;
}

void print(double x) {
    cout << "print double: " << x << endl;
}

在这种情况下,如果我们调用print(1),编译器就不知道应该使用哪个函数,因为1既可以被看成int类型也可以被看成double类型。

默认参数

默认参数是指函数定义时为某些参数提供默认值,使得在调用函数时可以只填写必须的参数,其他的参数使用默认值,这样既能简化函数调用,又能减少代码量。

函数定义

在函数定义时使用默认参数,可以在参数列表中给参数设置默认值,例如:

int sum(int x, int y = 0, int z = 0) {
    return x + y + z;
}

在这个函数定义中,yz都有默认值,如果调用时没有传入这两个参数,则使用默认值。

函数声明

当函数有默认参数时,函数声明时也需要声明默认值,写法有两种:

1. 在函数声明中声明默认参数

int sum(int x, int y = 0, int z = 0);

2. 在函数定义中声明默认参数

int sum(int x, int y, int z);
int sum(int x, int y = 0, int z = 0) {
    return x + y + z;
}
注意事项

默认参数有几个需要注意的事项:

  1. 函数调用时可以省略默认参数,但是如果想要调用函数时指定默认参数,可以使用如下的方式:
int main() {
    int result = sum(1, z=2);
    return 0;
}

这里我们省略了第二个参数y的值,但是通过z=2为第三个参数z指定了默认值。

  1. 当函数有多个参数时,只能从右向左按顺序使用默认参数。
int sum(int x, int y = 0, int z = 0);
// 正确调用
sum(1);
sum(1, 2);
sum(1, 2, 3);
// 错误调用,无法根据顺序调用默认参数
sum(1, , 2);
sum(1, 2, , 3);
总结

函数重载和默认参数是C++中非常重要的概念,可以使程序更加简洁,同时也能减少出错的概率。我们需要掌握函数重载和默认参数的用法和相关的注意事项,以便更好地运用它们。