教程 cpp tutorial

函数重载

在 C++ 中,函数重载是指在同一个作用域内,可以定义多个名字相同但参数不同的函数。根据传递给函数的参数类型或个数,编译器会自动选择最匹配的函数。

函数重载的规则

  1. 参数类型不同:函数可以有不同类型的参数。
  2. 参数个数不同:函数可以有不同个数的参数。
  3. 返回类型不同:返回类型不能作为重载的唯一区分依据,函数的返回类型不能用来区分不同的重载版本。

示例:根据参数个数进行重载

cpp
#include <iostream>
using namespace std;

// 定义三个重载函数
void print(int a) {
    cout << "整数: " << a << endl;
}

void print(double a) {
    cout << "浮动: " << a << endl;
}

void print(int a, double b) {
    cout << "整数和浮动: " << a << ", " << b << endl;
}

int main() {
    print(10);        // 调用第一个函数
    print(3.14);      // 调用第二个函数
    print(5, 2.71);   // 调用第三个函数
    return 0;
}

`

输出:

代码
整数: 10
浮动: 3.14
整数和浮动: 5, 2.71

示例:根据参数类型进行重载

cpp
#include <iostream>
using namespace std;

// 定义重载函数
void display(int a) {
    cout << "显示整数: " << a << endl;
}

void display(string a) {
    cout << "显示字符串: " << a << endl;
}

int main() {
    display(100);       // 调用整数类型重载
    display("Hello");   // 调用字符串类型重载
    return 0;
}

输出:

代码
显示整数: 100
显示字符串: Hello

重载的限制

  1. 返回类型不可作为重载区分标准:函数的返回类型不能仅用来区分重载函数。
cpp
int add(int a, int b) {
    return a + b;
}

double add(int a, int b) {  // 错误:不能仅通过返回类型重载
    return a + b;
}

上面的代码是错误的,编译器会报错,因为返回类型不能作为重载函数的区分标准。

  1. 参数列表的不同:重载函数必须在参数的类型或个数上有所不同。仅仅改变参数的名字并不足以区分函数。
cpp
void display(int x) {
    cout << "整数: " << x << endl;
}

void display(int y) {  // 错误:只是参数名不同,无法重载
    cout << "整数: " << y << endl;
}

这个例子也是错误的,因为函数仅通过参数名不同不能实现重载。

小结

  • 函数重载允许在同一个作用域内定义多个同名函数,它们根据参数类型或个数的不同来进行区分。
  • 重载函数不能仅通过返回类型来区分。
  • 参数列表的差异是重载的关键,通过改变参数类型或个数来实现。

掌握函数重载的使用,可以使你编写更简洁、灵活的代码。