C++入门基础知识笔记整理(三)

 六、C++入门基础知识的输入和输出

8cc98d3916803118663b51b461e5c038.png

 

在C语言中有标准输入输出函数scanf和printf,而在C++中有cin标准输入和cout标准输出。在C语言中使用scanf和printf函数,需要包含头文件stdio.h。在C++中使用cin和cout,需要包含头文件iostream以及std标准命名空间。

C++的输入输出方式与C语言更加方便,因为C++的输入输出不需要控制格式,例如:整型为%d,字符型为%c。

d58924865966f27b473a0310227439f8.png

注意:endl,这其中的l不是阿拉伯数字1,而是26个英文字母的l,它的作用相当于换行。

这里我们还要注意下cin的特点,他和C语言中的gets有些像,gets是遇到换行符停止,而cin是以遇到空格,tab或者换行符作为分隔符的,因此这儿输入hello world会被空格符分隔开来。

e2d006efd063adefd50fb66542ea54df.png

这儿我输入的是hello world,但因为输入时出现了空格,所以之后的内容并不会读入,因此arr中存的就是hello。

七、C++入门基础知识-缺省参数

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

 9f59d18de533258b9e3b9e646f8a4af9.png

 

1、全缺省

全缺省参数,即函数的全部形参都设置为缺省参数。

 7961e2e4db913711650429e8abea233d.png

 

2、半缺省参数

4aa6efe14dfaa401b88660eadb32801a.png

注意: 

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

     

    4afd40a07d01b4fa800399d3f583f3e1.png

  • 缺省参数不能在函数声明和定义中同时出现

  •  
  • 5839f356c1c331fc0a7c0ed2386be99f.png

    因为:如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。

  • 缺省值必须是常量或者全局变量。18cecc2fadc753477c9a7dddf29ca15e.png

八、C++入门基础-C++函数重载

1、函数重载

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

4df2e071ed29a7f2228c87a56a0ba9d3.png

 

注意:若仅仅只有返回值不同,其他都相同,则不构成函数重载。

ebd5a6afce4dd69c3611c7621b9c82e4.png

 

2、C++函数重载的原理

为什么C++支援函数重载,而C语言不可以了?

这里我们就要回顾一下以前的知识了,在运行到执行文件前,要经过:预编译,编译,汇编,链接这些阶段

其实问题就出在编译完之后的汇编阶段,因为在这里C++和C语言有着些许的不同,下面我们来看看:

采用C语言编译器编译之后

688df54b347bdb7238b85026584fe012.png

 采用C++编译器编译之后

a901da76f32cd93c1ba298c0f4f0c0f1.png

 

总结:

        其实归根到底,还是因为C编译器和C++编译器对函数名的修饰不同。在gcc下的修饰规则是:【_Z+函数长度+函数名+类
型首字母】。

        这其实也告诉我们为什么函数的返回类型不同,不会构成函数重载,因为修饰规则并不会受返回值的影响。

3、extern “C”

有时候在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern “C”,意思是告诉编译器,

将该函数按照C语言规则来编译。比如:tcmalloc是google用C++实现的一个项目,他提供tcmallc()和tcfree

两个接口来使用,但如果是C项目就没办法使用,那么他就使用extern “C”来解决。

 

你可能感兴趣的:(C++语言,c++,笔记,算法,数据结构,开发语言)