C++知识–函数重载和缺省

一.缺省

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。

实际上缺省是分为以下几种情况的:

1.全缺省参数

#include <iostream>

//全缺省
void Func(int a=10, int b=20, int c=30)
{
	std::cout << "a = " << a << std::endl;
	std::cout << "b = " << b << std::endl;
	std::cout << "c = " << c << std::endl;

}
int main()
{
	
	Func(10,4,6); // 传参时,使用指定的实参
	Func();// 没有传参时,使用参数的默认值
	return 0;
}

2.半缺省参数

半缺省参数必须从右往左依次来给出,不能间隔着给

#include <iostream>

//半缺省,并不是缺省一般哈
void Func(int a, int b = 10, int c = 30)
{
	std::cout << "a = " << a << std::endl;
	std::cout << "b = " << b << std::endl;
	std::cout << "c = " << c << std::endl;
}
int main()
{
	Func(2);
	return 0;
}

缺省有以下几点需要大家注意:

1.缺省参数不能在函数声明和定义中同时出现,原因:如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。所以我们通常将缺省放在声明位置。
2. 缺省值必须是常量或者全局变量
3. C语言不支持(编译器不支持)

二.函数重载

定义:

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

 

但是需要注意的是,如果我们两个函数只是返回类型不同的话,是不算函数重载的。

函数重载主要分为以下三种情况:

1.函数参数不同:

//函数参数不同
void Func(int a, int b)
{
	;
}
void Func(double a, int b)
{
	;
}
int main()
{

	return 0;
}

2.函数参数个数不同:

//函数参数个数不同
double Func(int a, int b)
{
	;
}
int Func(int a, int b, int c)
{
	;
}

3.函数参数顺序不同:

//函数参数顺序不同
void Func(char a, int b)
{
	;
}
void Func(int a, char b)
{
	;
}

为什么C++支持函数重载,而C语言不支持函数重载呢?
在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接

 

我们就简单讲一下不同阶段会出现什么情况?

预编译阶段:展开头文件/宏替换/去掉注释/条件编译

编译阶段:检查语法错误,然后将代码转换为汇编代码

汇编阶段:将汇编代码转换为机器语言--二进制程序

链接阶段:将多个文件合并到一起

实际上我们如何查找函数是这样的:

我们在C语言中是通过查找函数名的地址然后访址知道的,但是在C++中我们规定将参数放到要查找中,这样函数参数不同就可以通过查找实现了,当然这个不同的编译器实现并不相同,大家可以自行了解。

补充:

在linux下,采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参数类型信息添加到修改后的名字中
 

最后,寒假加油吧!