C++ 命名空间总结

原创 2012年03月22日 11:46:28

1.命名空间用来干什么?

命名空间是用来处理程序中的同名冲突的。

2.命名空间是什么?

命名空间:实际上就是一个由程序开发者命名的内存区域,开发者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。

记住,命名空间的成员都是全局变量。

3.作用域操作符

假如,有一个命名空间name1

namespace name1

{

   class dataValue

   {

      public:

       int i ;

       double d;

    };

   int valueInt;

   enum

   {

      sunday,

      monday,

      tuesday

     };

}

当在程序中需要用到该命名空间定义的变量时,需要用作用域操作符,限定该变量是来自于哪个命名空间。

即:name1::valueInt = 1;

注意:只能限定命名空间中的定义的成员对象。

例如,在main()函数中:

         name1::dataValue data;

         data.i = 10;

        data.d = 100.0;

这里的data.i和data.d前面就没有用命名空间限定。这是因为,声明data时用的是name1中的对象,表明data是dataValue的类。

在data完成声明了之后,data是属于main()的。并不是属于name1中的对象,所以紧接着对data成员赋值的语句中,就没有出现作用域限定了。

4.使用命名空间成员

方法一:using

比如,上面的程序,可以在包含main()函数的文件中,#include预处理语句之后,加入 using name1::dataValue。

则在上述定义data的时候,就可以直接使用 dataValue data;来完成data的声明了。

但是,此时如果想在main()中使用name1中的sunday,还是得采用name1::sunday。

也就是说,在使用命名空间成员时,不想使用作用域限定符,就必须把每一个即将用到的命名空间成员采用using的方式说明一下。

方法二:using namespace

如果命名空间的成员非常多,采用using的方式,将会写出长长的一系列说明。此时,也可以直接使用using namespace name1,

来代替。使用using namespace,就是说,name1中的成员都可以直接在该文件中使用啦。

注意:直接使用作用域限定符,可以很清楚的知道该成员来自哪个命名空间,不易产生同名的错误。而使用using namespace时,

如果不加注意,很有可能一个文件中使用的多个namespace中就包含了相同名称的成员。。。

5.为什么有的时候需要加上using namespace std,有的时候又不用加呢?

这里有两种情况:

一:头文件名包括后缀.h,如stdio.h,math.h等。

这些头文件是C语言的库函数里面的,由于c语言没有命名空间,头文件并不存放在命名空间中。

因此在c++程序文件中如果用到带后缀.h的头文件时,不必用命名空间。只需在文件中包含所用的头文件即可。

  #include<math.h>

二:c++标准要求系统提供的头文件不包括后缀.h,例如iostream、string。为了表示与c语言的头文件有联系又有区别,c++所用的头文件名是在c语言的相应的头文件名(但不包括后缀.h)之前加一字母c。例如,c语言中有关输入与输出的头文件名为stdio.h在c++中相应的头文件名为cstdio。c语言中的头文件math.h,在c++中相应的头文什名为cmath。c语言中的头文件string.h在c++中相应的头文件名为cstring。注意在c++中,头文件cstnng和头文件strmg不是同一个文件。前者提供c语言中对字符串处理的有关函数(如strcmp,ctrcpy)的声明,后者提供c++中对字符串处理的新功能。

  此外,由于这些函数都是在命名空间std中声明的,因此在程序中要对命名空间std作声明。如:

  #include<cstdio>

  #include<cmath>

  usingnamespacestd;

 

 

Android总结:命名空间

一、命名空间简介 1.命名空间作用 作用:提供避免元素命名冲突的方法,里面存放的是特性属性的集合; 例如:Android的View存在id属性—代表View的唯一id,而你自定义的View也想自定义一...
  • p106786860
  • p106786860
  • 2016年12月30日 15:44
  • 2920

Unity 脚本学习总结

1.创建代码对应的基类:public class MyObjClass : MonoBehaviour2.创建枚举:public enum Direction { DirectX, ...
  • zszeng
  • zszeng
  • 2015年06月28日 15:56
  • 1498

C++基础篇--作用域和自定义命名空间

引子    为引出本文主题,先举个例子,以便后文对照理解:某学校一年招了3个叫李明的学生,为便于区分:1)按年龄排序分别称大、中、小李明;2)把他们分到不同班,这样各班内部就没有同名的李明,而学校范围...
  • ipmux
  • ipmux
  • 2015年03月23日 17:19
  • 3201

C++/c static和匿名命名空间 总结

from http://blog.csdn.net/Monkeycn/article/details/5817138 static: 1、函数之外的变量就是全局变量,这个想法正确吗...
  • lw370481
  • lw370481
  • 2012年09月18日 08:09
  • 544

c++中有关命名空间(namespace)的一些介绍

  • 2012年02月17日 23:55
  • 12KB
  • 下载

异常处理和命名空间(2013级-C++程序设计)

  • 2014年06月16日 11:15
  • 573KB
  • 下载

C++命名空间培训

  • 2016年03月10日 12:02
  • 93KB
  • 下载

c++ 命名空间

  • 2012年05月21日 11:15
  • 50KB
  • 下载

C++命名空间小结

  • 2014年10月22日 10:42
  • 2KB
  • 下载

C++-命名空间namespace

  • 2012年02月23日 15:55
  • 61KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 命名空间总结
举报原因:
原因补充:

(最多只允许输入30个字)