C++ 中 namespace 和 class 的区别
展开全部
class也是一个名字空间,不过他是封闭的,也就是说你只能在一个文件里面定义class包含什么(通俗点讲,就是一个class只能有一个头文件);
namespace是开放的,和class不同的是你可以在多个文件里面象同一个namespace里面添加东西。比如stl里面的东西都是在名字空间std里面,但是却定义在了多个文件里面。
class做名字空间时,与namespace形式上类似
但namespace是开发的,可以追加内容,而class的定义是一次性的
另外,对class A的成员M用 A::M 并不总是允许的,这种用法只在两种情况下有效:
1. 类的成员函数引用本类(含祖先类)的成员
2. 其它函数引用类的静态成员
因为类中定义了一个(非静态)成员变量,并没有定义其实体,只是定义了一个名字。只有创建了类的实例(对象),成员变量的实体才存在。
但 namespace 不存在这个问题,因为,namespace 中定义的变量,就是一个实体,在任何情况下(只要在可见域内),对namespace A,A::M 的写法都是允许的。
namespace是开放的,和class不同的是你可以在多个文件里面象同一个namespace里面添加东西。比如stl里面的东西都是在名字空间std里面,但是却定义在了多个文件里面。
class做名字空间时,与namespace形式上类似
但namespace是开发的,可以追加内容,而class的定义是一次性的
另外,对class A的成员M用 A::M 并不总是允许的,这种用法只在两种情况下有效:
1. 类的成员函数引用本类(含祖先类)的成员
2. 其它函数引用类的静态成员
因为类中定义了一个(非静态)成员变量,并没有定义其实体,只是定义了一个名字。只有创建了类的实例(对象),成员变量的实体才存在。
但 namespace 不存在这个问题,因为,namespace 中定义的变量,就是一个实体,在任何情况下(只要在可见域内),对namespace A,A::M 的写法都是允许的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询