欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

深入理解C++中的函数重载:从C的基础出发

最编程 2024-02-14 12:57:47
...

重载的大白话就是重名函数,

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。

#include<iostream>
using namespace std;

// 1、参数类型不同
int Add(int left, int right)
{
	cout << "int Add(int left, int right)" << endl;
	return left + right;
}
double Add(double left, double right)
{
	cout << "double Add(double left, double right)" << endl;
	return left + right;
}

// 2、参数个数不同
void f()
{
	cout << "f()" << endl;
}
void f(int a)
{
	cout << "f(int a)" << endl;
}

// 3、参数类型顺序不同
void f(int a, char b)
{
	cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
	cout << "f(char b, int a)" << endl;
}
int main()
{
	Add(10, 20);
	Add(10.1, 20.2);
	f();
	f(10);
	f(10, 'a');
	f('a', 10);
	return 0;
}

背后的原理:

我们在实际的项目工程中会有多个头文件和源文件,
在程序的翻译过程中汇编阶段会形成每个项目文件相应的符号表,
在这里插入图片描述

由于我们在链接前都没有sum函数真正的地址,故需要再链接时去到对应的文件符号表去寻找合并,而C语言在形成符号表时是以函数名形成的,因为同名函数没办法区分,并不能应对函数重载的的机制

C++为了对应此问题将产生的符号表以使用前缀+函数名+变量名第一个字符构成,这样就能应对函数重载的问题

另外:如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办法区分。


推荐阅读