C++入门——命名空间和缺省参数

大家好!我们终于进入到C++的内容知识了,我先大概讲一些C++的零碎的知识,为后面的学习打下基础。
C++入门——命名空间和缺省参数_第1张图片

文章目录

  • 1. C++关键字(C++98)
  • 2. 命名空间
    • 2.1 命名空间定义和使用
  • 3. C++输入&输出
  • 4. 缺省参数
    • 4.1 缺省参数概念
    • 4.2 缺省参数分类
      • 全缺省参数
      • 半缺省参数

1. C++关键字(C++98)

C++总计63个关键字,C语言32个
ps:下面我们只是看一下C++有多少关键字,不对关键字进行具体的讲解。后面再细讲。
C++入门——命名空间和缺省参数_第2张图片

2. 命名空间

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。

上面的意思是什么呢?大家看下面的代码:
C++入门——命名空间和缺省参数_第3张图片
运行结果如下:
在这里插入图片描述
我们知道:命名的规则是变量名不能和关键字冲突,但没有说和函数名冲突。比如说:有两个人合作,一个人用fib做函数名,另一个人不知道,用fib来做变量名。这样就会发生命名冲突。
C++入门——命名空间和缺省参数_第4张图片
所以,我们要知道同一个域里面,不能有同名变量。
而这个问题,C语言没有很好的解决,C++引用namespace解决了这个问题。

2.1 命名空间定义和使用

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
实例:
C++入门——命名空间和缺省参数_第5张图片
这样,我们就用这个关键字试一下:
C++入门——命名空间和缺省参数_第6张图片
这样就像是rand放到test1里的空间,和外面隔离起来。这样打印的就是库函数里的rand,所以就是函数的地址。而这个test1叫做命名空间域。
那我们该如何访问test1里的rand呢?我们来看下面这个例子:
C++入门——命名空间和缺省参数_第7张图片
在C语言中,我知道全局变量和局部变量变量名相同时,局部变量优先。
那么我们该如何去访问全局变量的a呢?看下面的代码:
C++入门——命名空间和缺省参数_第8张图片
我们要用::操作符,::这个左边什么都不写就会默认为全局域里面的变量。
接下来,我们再看一下上面的那个问题就简单了。只需要这样做:
C++入门——命名空间和缺省参数_第9张图片
这样就可以得到那个命名空间域里的变量了。
第二: 命名空间可以嵌套
C++入门——命名空间和缺省参数_第10张图片
为什么要嵌套,因为同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
如果,在工程中你是这样去写的:
C++入门——命名空间和缺省参数_第11张图片
C++入门——命名空间和缺省参数_第12张图片
在测试里,你会发现:
C++入门——命名空间和缺省参数_第13张图片
它们的类型重定义了。这样,我们可以用嵌套在隔离出来:
C++入门——命名空间和缺省参数_第14张图片
C++入门——命名空间和缺省参数_第15张图片
这样就不会发生冲突了。
那么我们该如何使用呢?
C++入门——命名空间和缺省参数_第16张图片
这里,我们要注意两点:
1.这里定义的变量还是全局变量,namespace不改变它的生命周期。
2.namespace只能在全局用,不能在局部里用。

到这里,可能有人会认为这样写挺麻烦的,每次定义变量都要写很长一节,那么我们可以这样去改进:
C++入门——命名空间和缺省参数_第17张图片
这里的意思是把test这个命名空间定义的东西放出来。
还可以这样写:
C++入门——命名空间和缺省参数_第18张图片
这里的意思是把test1这个命名空间定义的东西放出来。
但这样写,顺序不能颠倒。我们可以这样写:
C++入门——命名空间和缺省参数_第19张图片
然后,我们来看下面的一个问题:
假如,我们对fib很常用,我们把test放出来:
C++入门——命名空间和缺省参数_第20张图片
这样做其实也不是很好,你全部放出来了,rand也放出来了,可能就会冲突。我们其实可以用什么就放什么
C++入门——命名空间和缺省参数_第21张图片
这样就会比较安全。
C++入门——命名空间和缺省参数_第22张图片
大家应该都看过写C++里会这样写。
在这里插入图片描述
这里std的意思就是:C++库的命名空间。
像后面的cout,endl等等都是在这个命名空间里。
放出来,方便使用了,但也存在冲突风险。在这里,我们也可以放一些常用的出来。

3. C++输入&输出

首先,我们再来看一下第一个程序。
C++入门——命名空间和缺省参数_第23张图片
说明:
1.使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。

注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持格式,后续编译器已不支持,因此推荐使用
+std的方式。

2.>> 流提取运算符,<< 流插入运算符,endl是换行
3.使用C++输入输出更方便,不需增加数据格式控制,比如:整形–%d,字符–%c
C++入门——命名空间和缺省参数_第24张图片

4. 缺省参数

4.1 缺省参数概念

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

举个例子:
C++入门——命名空间和缺省参数_第25张图片

4.2 缺省参数分类

全缺省参数

全缺省的意思就是:都给了默认值。
看下面的例子:
C++入门——命名空间和缺省参数_第26张图片
你可以看到,当那个给了参数,就用给的,没给参数的就用默认值。
这里,我们要注意:必须要从左往右依次给实参。不能不给a,就给b。

半缺省参数

半缺省的意思就是:部分给了默认值。
C++入门——命名空间和缺省参数_第27张图片
你们可以看到,a没给默认值,b,c给了默认值。
在这里,我们要注意:那个没给默认值的参数必须要给实参,不然会发生错误。

还有同学可能会提出这个问题,能不能这样:
C++入门——命名空间和缺省参数_第28张图片
这样是不行的,会出现歧义。
注意:半缺省参数必须从右往左依次来给出,不能间隔着给。
缺省参数的意义就是使用起来比C语言更加灵活。

然后,我们进入下一个问题:
缺省参数不能在函数声明和定义中同时出现。
C++入门——命名空间和缺省参数_第29张图片
原因:如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。

然后,我们看下一个问题:
能不能声明给,定义不给
C++入门——命名空间和缺省参数_第30张图片
C++入门——命名空间和缺省参数_第31张图片
C++入门——命名空间和缺省参数_第32张图片
我们可以看到是可以的。
那能不能声明不给,定义给呢
C++入门——命名空间和缺省参数_第33张图片
C++入门——命名空间和缺省参数_第34张图片
C++入门——命名空间和缺省参数_第35张图片
这里就不可以,为什么呢?
因为,在编译时,#include "Queue.h"会被展开,我们只能看到声明,函数的定义在链接的时候,而第一个我们没有传参数,声明也没有参数,就会报错。

你可能感兴趣的:(C++,c++,开发语言)