一.缺省
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。
实际上缺省是分为以下几种情况的:
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++编译完成后,函数名字的修饰发生改变,编译器将函数参数类型信息添加到修改后的名字中
最后,寒假加油吧!