【C++入门】函数重载

文章目录

  • 一、基本概念
    • 1. 参数个数不同
    • 2. 参数类型不同
    • 3. 参数类型的顺序不同
  • 二、函数名修饰规则

一、基本概念

函数重载就是在同一个作用域内,允许存在参数不同的同名函数

这里的参数不同可以分为三种情况,参数个数不同、参数类型不同、参数类型的顺序不同。
这三种情况可以叠加出现,比如参数个数不同、类型也不同。具体原因后面再说。

1. 参数个数不同

例子:

void func(int a, int b, int c)
{
	...
}

void func(int a, int b)
{
	...
}

2. 参数类型不同

例子:

void func(int a, int b)
{
	...
}

void func(int a, double b)
{
	...
}

void func(double a, int b)
{
	...
}

void func(double a, double b)
{
	...
}

3. 参数类型的顺序不同

例子:

void func(int a, double b)
{
	...
}

void func(double a, int b)
{
	...
}

注意这里的顺序指的是参数类型的顺序,而不是参数名的顺序。
比如下面的例子就不构成函数重载,这样做 C++ 是不支持的。

void func(int a, double b)
{
	...
}

void func(int b, double a)
{
	...
}

二、函数名修饰规则

C++ 支持函数重载的本质,其实是因为 C++ 特殊的函数名修饰规则。

我们知道 C 语言是不支持同名函数的,具体可以参考这篇文章:传送门
而 C++ 得益于其特殊的函数名修饰规则,编译后的函数名不再是单纯的函数名字,而是会加入参数的信息,类似func_int_double这种。
函数名经过修饰,添加了所有参数的类型的信息,因此可以区分参数个数不同、参数类型不同和参数类型顺序不同的这些情况。

具体的函数名修饰规则根据平台会有所不同,这里不作深究。我们不妨记住func_int_double这种形式,便可判断是否构成函数重载的所有情景。

显然,只有返回类型不同是不构成函数重载的,因为 C++ 的函数名修饰规则不包含返回类型的信息。

你可能感兴趣的:(C++入门,c++,开发语言)