六、C++入门基础知识的输入和输出
在C语言中有标准输入输出函数scanf和printf,而在C++中有cin标准输入和cout标准输出。在C语言中使用scanf和printf函数,需要包含头文件stdio.h。在C++中使用cin和cout,需要包含头文件iostream以及std标准命名空间。
C++的输入输出方式与C语言更加方便,因为C++的输入输出不需要控制格式,例如:整型为%d,字符型为%c。
注意:endl,这其中的l不是阿拉伯数字1,而是26个英文字母的l,它的作用相当于换行。
这里我们还要注意下cin的特点,他和C语言中的gets有些像,gets是遇到换行符停止,而cin是以遇到空格,tab或者换行符作为分隔符的,因此这儿输入hello world会被空格符分隔开来。
这儿我输入的是hello world,但因为输入时出现了空格,所以之后的内容并不会读入,因此arr中存的就是hello。
七、C++入门基础知识-缺省参数
缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该
默认值,否则使用指定的实参。
1、全缺省
全缺省参数,即函数的全部形参都设置为缺省参数。
2、半缺省参数
注意:
-
半缺省参数必须从右往左依次给出,不能间隔着给。
-
缺省参数不能在函数声明和定义中同时出现
-
因为:如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。
-
缺省值必须是常量或者全局变量。
八、C++入门基础-C++函数重载
1、函数重载
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题
注意:若仅仅只有返回值不同,其他都相同,则不构成函数重载。
2、C++函数重载的原理
为什么C++支援函数重载,而C语言不可以了?
这里我们就要回顾一下以前的知识了,在运行到执行文件前,要经过:预编译,编译,汇编,链接这些阶段
其实问题就出在编译完之后的汇编阶段,因为在这里C++和C语言有着些许的不同,下面我们来看看:
采用C语言编译器编译之后
采用C++编译器编译之后
总结:
其实归根到底,还是因为C编译器和C++编译器对函数名的修饰不同。在gcc下的修饰规则是:【_Z+函数长度+函数名+类
型首字母】。
这其实也告诉我们为什么函数的返回类型不同,不会构成函数重载,因为修饰规则并不会受返回值的影响。
3、extern “C”
有时候在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern “C”,意思是告诉编译器,
将该函数按照C语言规则来编译。比如:tcmalloc是google用C++实现的一个项目,他提供tcmallc()和tcfree
两个接口来使用,但如果是C项目就没办法使用,那么他就使用extern “C”来解决。