目录
一、命名空间
命名冲突
例如:
定义
作用
例如:隔离
调用
举例
命名空间合并
嵌套使用
选择性释放
二、输入输出
输出流cout
输入流cin
三、缺省参数
定义
全缺省参数
半缺省参数
一、命名空间 命名冲突
定义我们知道,在C语言中,变量名不能和关键字一样,一个作用域中不能有两个相同的变量名,否则会出现重定义问题
例如:变量名和函数名冲突
定义变量rand,rand是头文件 stdlib.h 下的一个函数,再不包含 stdlib.h 的情况下,正常运行,包含头文件后,会出现重定义的问题。
C语言中没有很好的解决这个问题,因此C++中引用出命名空间来解决冲突变量问题。
作用在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
调用在全局变量中使用namespace,是在全局变量中隔离出来一片区域,可用来存放变量,函数,结构体,类,也可以嵌套其他命名空间。
例如:隔离用法和结构体类似,但注意结尾没有 " ; " 。
意思是在A这个空间里面存着 rand这个变量
namespace将变量rand和头文件下rand函数隔离开来
打印出来的东西是函数rand的地址。
命名空间合并在项目中,主函数中默认是调用局部变量,没有局部变量再调用隔离空间外的全局变量,那么怎么才能调用命名空间(隔离空间)中的内容呢?
这里就要用到域 *** 作符 " ::"
举例默认调用局部变量rand=1
没有局部变量时,默认调用除命名空间外的全局变量rand=0
当局部变量存在时,怎么调用全局变量呢,用到 “::”
调用命名空间中的变量:“命名空间名 + ::+ 空间内容”
嵌套使用相同的命名空间会进行合并
例如在两个头文件中命名两个相同的空间A
测试文件中包含两个头文件
运行时报错,结构体重定义问题
说明了命名空间名称相同时,这两个空间进行了合并,变量a,b没有变量冲突问题,但是其中定义的结构体发生了冲突。
那么如何解决这类问题呢?
可进行命名空间的嵌套使用。
选择性释放在遇到空间合并时产生的名称冲突问题,可以在命名空间中再进行一次空间命名,嵌套使用
例如:
这样再合并的时候,两个结构体也是再两个命名空间中的独立存在,不会产生命名冲突的问题。
但是多层嵌套的话,往往使用时是很麻烦的
以上述为例
这时我们可以使用
using namespace A;
相当于将命名空间A下的所有内容释放到全局变量中,不再隔离
那么就可以直接省略A::
也可以继续释放,例如:
using namespace A; using namespace data;
此时释放了A中的内容,也释放了data中的内容
Node是原来data命名空间中的结构体
能继续释放掉cache命名空间吗?
不行,这样相当于全部释放到了全局变量中
那么命名空间就没有意义了
并且会发生两个结构体重定义的问题
全部释放时会出现上述:Node不明确,结构体重定义问题。
除了一层一层全部释放的方式,有没有一种方法能有选择性的释放出我们想用的类型呢?
答案是有的。
如:
a,b在原来在两个A中,释放掉A后,a,b彻底暴露在全局变量中,可直接修改
因为先释放了A,再释放了data,因此也可直接使用data中的结构体类型
下来我们有选择性的释放A中data的命名空间
using namespace A::data;
此时a,b不能直接修改,n3不能直接定义,因为命名空间A并没有释放掉他们,只是释放了A中的data中的内容,此时n1的结构体类型是原命名空间data中定义的。
再看一个例子:
若释放的是命名空间中的一个内容
直接using+空间名称::释放的类型变量名即可
前面不能加namespace,否则会出错
多层嵌套下:
若释放的是命名空间,即命名空间下所有内容
要加namespace
二、输入输出
输入流cin使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。
输出流cout流插入运算符<<,将要输出的内容插入到控制台中。
在C++的语法中:iostream为头文件,根c中头文件作用一样,std为封C++库的命名空间。
cout(标准输出),endl(换行)就是在std中的。
#include
using namespace std; int main() { cout << "hello word" << endl; return 0; } 没有用命名空间时,要指定释放cout和endl,才能顺利运行。
cin就相当于键盘输入,通过流提取运算符>>给到变量中。
输入cin相当于C语言中scanf,输出cout相当于C语言中printf
使用C++输入输出更方便,不需增加数据格式控制
比如:整形--%d,字符--%c
可以多个输入输出
三、缺省参数 定义
全缺省参数缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
相当给函数的参数加个备胎!!
半缺省参数全部都给了缺省参数
#include
using namespace std; void TestA(int a = 5, int b = 10, int c = 15) { cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; } int main() { TestA(); TestA(1); TestA(1,5); TestA(1,5,6); return 0; }
缺省部分参数
至少要给定的实参数=未给默认值的形参个数
缺省必须从右往左缺省,并且连续
缺省参数不能在函数声明和定义中同时出现
可以声明中给,定义中不给
不能定义中给,声明中不给
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)