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的元素,后面可以是数据类型。

你可能感兴趣的:(C++,c++,java,jvm)