17.函数重载(overload)

在传统c语言中,函数名必须是唯一的,程序中不允许出现同名的函数。在c++中是允许出现同名的函数,这种现象称为函数重载。

1. 函数重载基本语法

实现函数重载的条件:

①同一个作用域
②参数个数不同
③参数类型不同
④参数顺序不同

#include<iostream>
using namespace std;

//在传统c语言中,函数名必须是唯一的,程序中不允许出现同名的函数。
//在c++中是允许出现同名的函数,这种现象称为函数重载
void test01()							//参数个数不同
{
	cout << "无参数的func" << " " << endl;
}
void test01(int a)
{
	cout << "有int型参数的func" << " " << a << endl;
}
void test01(int a, int b)
{
	cout << "参数个数不同" << " " << a + b << endl;
}
void test01(string b)					//参数类型不同
{
	cout << "有string类型参数的func"  << " " << b << endl;
}
void test01(char a,string b)           //参数顺序不同
{
	cout << "参数顺序不同" << " " << b + a << endl;
} 

void test01(string b,char a)
{
	cout << "参数顺序不同" << " " << b + b << endl;
}
int main()
{
	test01();
	test01(5,36);
	test01(8);
	test01("string型");
	test01("string型",'g');
	test01('y',"string型");
}

运行结果:在这里插入图片描述

注意:

(一)返回值不作为函数重载依据,即只能通过函数参数进行区分

namespace B{
	void MyFunc(string b, int a){}
	//int MyFunc(string b, int a){} //无法重载仅按返回值区分的函数
}

(二)函数重载和默认参数一起使用,需要额外注意二义性问题的产生

void MyFunc(string b){
	cout << "b: " << b << endl;
}
//函数重载碰上默认参数
void MyFunc(string b, int a = 10){
	cout << "a: " << a << " b:" << b << endl;
}
int main(){
	MyFunc("hello"); //这时,两个函数都能匹配调用,产生二义性
	return 0;
}

2.引用的重载:const也可以作为重载条件

在这里插入图片描述
在这里插入图片描述

3.函数重载的原理

编译器为了实现函数重载,也是默认为我们做了一些幕后的工作,编译器用不同的参数类型来修饰不同的函数名,比如void func(); 编译器可能会将函数名修饰成_func,当编译器碰到void func(int x),编译器可能将函数名修饰为_func_int,当编译器碰到void func(int x,char c),编译器可能会将函数名修饰为_func_int_char,这里使用”可能”这个字眼是因为编译器如何修饰重载的函数名称并没有一个统一的标准,所以不同的编译器可能会产生不同的内部名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S1lent9o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值