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

📅  最后修改于: 2023-12-03 14:59:47.953000             🧑  作者: Mango

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

在 C++ 中,函数重载和默认参数是非常常用的语法,它们可以让我们更加方便地编写代码,提高代码的可读性和可维护性。

函数重载

函数重载是指在同一个作用域内,多个函数可以拥有相同的名称,但是参数列表不同,编译器会根据参数的类型、数量和顺序来确定调用哪个函数。

例如,下面这个例子演示了两个同名的函数 max,一个用于比较两个整数的大小,另一个用于比较两个浮点数的大小:

int max(int a, int b) {
    return a > b ? a : b;
}

float max(float a, float b) {
    return a > b ? a : b;
}

int main() {
    int x = 3, y = 4;
    float f1 = 1.23, f2 = 4.56;

    // 调用 int max(int, int)
    int result1 = max(x, y);

    // 调用 float max(float, float)
    float result2 = max(f1, f2);

    return 0;
}

需要注意的是,函数重载的规则是基于参数的类型、数量和顺序,因此以下代码是无法通过编译的:

int max(int a, int b) {
    return a > b ? a : b;
}

float max(int a, int b) {
    return a > b ? a : b;
}
默认参数

默认参数是指在函数声明时可以给参数指定一个默认值,在函数调用时,如果没有传递该参数,则使用默认值。默认参数必须从右往左添加,也就是说,如果一个参数有默认值,则它右侧的所有参数都必须有默认值。

例如,下面这个例子演示了一个函数 print,其中第二个参数 n 有一个默认值 1,如果不传递第二个参数,则默认打印一次:

void print(const char* str, int n = 1) {
    for (int i = 0; i < n; i++) {
        std::cout << str << std::endl;
    }
}

int main() {
    // 打印一次
    print("Hello");

    // 打印两次
    print("World", 2);

    return 0;
}

需要注意的是,一旦一个参数被指定了默认值,它就可以被视为可选参数,因此在函数调用时,必须将指定了默认值的参数放在后面,否则编译器会报错:

void print(int n = 1, const char* str) {
    for (int i = 0; i < n; i++) {
        std::cout << str << std::endl;
    }
}

int main() {
    // 编译错误
    print("Hello");

    return 0;
}
总结

函数重载和默认参数是 C++ 中常用的语法,它们可以让我们更加方便地编写代码,提高代码的可读性和可维护性。需要注意的是,函数重载的规则是基于参数的类型、数量和顺序,而默认参数必须从右往左添加,否则编译器会报错。