0
点赞
收藏
分享

微信扫一扫

函数重载(C++)

90哦吼 2022-02-22 阅读 189

目录

一.概念

二.代码实现

 三.原理剖析


一.概念

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

        那么在这里为什么要引进函数重载呢???

        在C语言中我们定义一个函数函数名不可以重名;但是我们会遇到以下情况:

int add(int a, int b) {
	return a + b;
}

        但是如果我们要进行浮点型或者double型的数字相加,那么在C语言中我们还要写两个函数..

        而函数重载就刚好可以解决这种问题~~

二.代码实现

#include <iostream>
using namespace std;


int add(int a, int b) {
	return a + b;
}

double add(double a, double b) {
	return a + b;
}

double add(int a, double b) {
	return a + b;
}

int main() {
	cout << add(1, 2) << endl;
	cout << add(1.1, 2.2) << endl;
	cout << add(1, 2.2) << endl;
	return 0;
}

        在C++中,编译器会根据参数来判断调用哪个函数,我们来证明一下:

在上述代码中

        第一行输出应该是调用int add(int a, int b);输出应为3;

        第二行输出应该是调用double add(double a, double b);输出应为3.3;

        第三行输出应该是调用double add(int a, double b);输出应为3.2;

        运行结果为下:

 三.原理剖析

        那为什么C++支持函数重载,而C语言不支持函数重载呢?

         在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。

         在链接时,面对Add函数,这里每个编译器都有自己的函数名修饰规则,我们先来看一下C语言编译器的函数修饰规则是什么样的:

         我们可以看出C语言编译器下的函数修饰规则是_add  ;

        我们再来看一下C++编译器的函数修饰规则:   ?add@@YAHHH@Z

        在C++编译器中我们发现函数修饰规则很复杂,而在C语言中函数修饰规则没有那么复杂,所以在C++编译器可以实现函数重载,编译器可以根据函数修饰来判断同名函数,而C语言则不可以..

        C++在windows下的修饰规则:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!函数重载要求参数不同跟返回值没关系!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

举报

相关推荐

0 条评论