05 C++语言---作用域和命名空间
4.1 作用域作用域描述的是在C中变量、常量、函数的使用范围。作用域一般有一下几种1、全局作用域 在全局作用域中我们定义的函数或者是数据都是全局可见的在整个项目中都可以调用和使用。一般的声明和定义都是在命名空间之外。一般全局变量需要定义在CPP文件中如果定义在头文件中那么在引入的时候会出现重复定义的问题。2、命名空间作用域 命名空间作用域中的函数和数据只能在相应的命名空间中使用如果在全局作用据中调用则无法使用会报未定义错误。3、类作用域 此作用域从名字上就可以看出来是在类中定义的函数和数据当然在此作用域的数据也只能在类中使用在类中的函数被称为成员函数数据称为成员数据成员变量。4、函数作用域 函数作用域说是的就是在函数中定义的数据这里也包括函数的形参此作用域中的形参或者在函数中定义的变量都只能在此函数中使用。5、块作用域块作用域指的是在一组大括号中的范围这个范围中声明的变量作用域就是块作用域。4.2 命名空间命名空间的引入是为了解决不同库之间出现相同的函数产生二义性。导致程序无法编译无法运行的问题。他可以作为附加信息来区分不同库中相同名称的函数、类、变量等。命名空间就是定义一个范围。命名空间的使用命名空间的定义关键字是namespace后面跟的就是命名空间的名称。namespace test { class ClassEximple; }以上就是定义了一个命名空间test将类ClassEximple这个类放到test命名空间中声明。这样在以后使用的过程中如果调用函数或变量需要在前面加上命名空间的名称。命名空间可以像头文件一样进行引用当命名空间引入之后就在调用的时候可以不适用命名空间的名字进行限定需要注意的如果这里引入的两个命名空间两个命名空间有重复的函数或者数据还是需要使用命名空间限定的不然还是会产生二义性的。命名空间的引用using namespace命名空间的名称这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器后续的代码将使用指定的命名空间中的名称。例如using namespace std以上就是引入的std标准库的命名空间。特性命名空间的定义是可以叠加的就是当你在一个文件中使用了命名空间并将类A添加到命名空间在另一个文件中也进行定义同名的命名空间并将类B添加到命名空间中。这是命名空间就包含两个类的数据和函数。例如namespace test { class 类A; } namespace test { class 类B; } 这个时候命名空空间test中就包含了类A的元素和类B的元素。需要获取命名空间中类的函数的时候可以使用::符号进行限定例如test::类A //这就是指定使用类A的元素后面可以是数据类型。