补充
在讲标题的两个内容之前先插入两个常用函数
cout和cin
cout和C语言中的printf功能相同,不过printf在使用时还要写出数据类型,而cout则能自行判断,这里的<<叫做流插入
注:使用C++函数时需要包含头文件 #include<iostream>,而且需要展开命名空间std,源文件后缀必须是.cpp
cin则是对标的printf函数>>叫做流提取
endl是换行
cout和cin也有他专门控制精度的方式,但是比较复杂,既然c++还是兼容C的,那么我们也可以使用printf和scanf来控制精度
缺省参数
缺省参数实际上就像一个备胎
当调用函数不传参数时,缺省参数就派上用场了
这里的Fun函数如果不传参数,那么就使用0,如果传参,那就用所给的参数
全缺省
就是当我们有多个参数的时候全部都用缺省参数,这个就叫全缺省
注:缺省参数不支持跳着缺省,必须是连续的
半缺省
就是函数一部分给缺省参数
也必须是从右往左连续缺省
注:这里可以传3个参,也可以传1个,但是不能不传参数,因为函数的第一个参数没有缺省值
缺省的应用
在我们写栈的初始化时,当知道要存多少数据时,就可以直接写,当不知道时,传的值太多就会浪费空间,所以这里就要用到缺省参数
注!!!:缺省参数不能在声明和定义同时出现
要是头文件和源文件都有缺省参数,那么运行时就会报错
就是声明和定义不能同时给缺省参数
则是要在声明处给
函数重载
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理功能类似数据类型不同的问题
就是C语言不允许同名函数的存在,C++可以,但是 参数个数 或 类型 或 类型顺序 这三个必须有一个或多个不同
而且是必须在同一个作用域,在不同的命名空间里也不是函数重载了
编译器到底是怎么找到两个同名函数不同之处呢?
C++这里会对函数名作一定的修饰
就像参数都是int类型的函数在函数名后面加上一个ii就表示双int参数,双double则是dd
这样代码运行时也就能快速定位到相应的位置上
接着在linux上写类似的代码
在C语言编译下就是原来的名字,没有多作修饰
C++则是不同
在换个参数不同的函数,描述也会随即改变
函数返回值不同也不能构成重载,虽然他们修饰后的名字不同了
但是这样调用根本看不出调的是哪个函数
这就是函数重载