下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

C++基础之命名空间

作者:课课家     来源: http://www.kokojia.com点击数:1031发布时间: 2016-12-05 09:48:58

标签: 编程语言C++命名空间

大神带你学编程,欢迎选课

  在利用C++语言进行程序编写的过程中,为了避免命名冲突而引起不必要的时间和精力的浪费,程序编写者们为C++语言引入了命名空间(Namespace)的这一个概念,其关键字为“namespace”。在本次的讲解中课课家笔者主要给大家理清C++语言中命名空间的基本概念以及它在我们实际程序编写中的作用。

C++基础之命名空间_编程语言_C++_命名空间_课课家

  随着编程语言的不断发展和更新,通常一个系统不仅仅通过一个人来开发完成,大多数情况下都是通过不同的人来开发同一个系统,正是由于这种情况,在实际中不可避免的就会出现变量或函数的命名冲突,表面上所有的代码测试通过显示没有问题,事实上当我们将所有的代码结合到一起时,因为编译者不同习惯的命名而导致变量或函数重名问题的发生就会造成一定的混乱,具体比如:

  intflag=1;//甲的声明的变量

  //……//中间间隔若干行代码

  boolflag=true;//乙的声明的变量

  通过观察上面的代码,我们可以发现甲喜欢声明int型变量用于逻辑判断,而乙则更喜欢采用bool类型变量。当这两个声明放到同一个函数中的时候,编译器会提示出flag变量重新定义的错误。这种问题如果不加以处理是无法编译通过的。那么到底我们如何解决这样的问题呢?不用担心,其实我们可以使用命名空间解决类似上面的命名冲突问题,具体比如:

  namespaceJia{//甲的变量声明

  intflag=1;

  }

  namespaceYi{//乙的变量声明

  boolflag=true;

  }

  甲与乙各自定义了以自己姓氏为名的命名空间,此时我们将甲与乙的flag变量定义再置于同一个函数体中就不会出现以上类似的问题了。当然我们在使用这两个变量的时候需要指明所采用的是哪一个命名空间中的flag变量。指定所使用的变量时需要用到“::”操作符,“::”操作符是域解析操作符,具体比如:

  Jia::flag=0;//使用甲定义的变量flag

  Yi::flag=false;//使用乙定义的变量flag

  我们已经定义了两个命名空间Jia和Yi并在其中各自声明flag变量,当我们使用的时候则需要分别用域解析操作符指明此时用的flag变量是谁定义出来的flag变量,是乙还是甲定义的。除了直接使用域解析操作符,其实我们还可以采用using声明,具体比如:

  usingJia::flag;

  flag=0;//使用甲定义的变量flag

  Yi::flag=false;//使用乙定义的变量flag

  在上面的代码的开头我们用using声明了Jia::flag,其具体含义是using声明以后的程序中如果出现未指明的flag时,则使用Jia::flag,但是如果要使用乙定义的flag,我们则仍需要Yi::flag。using声明不仅仅可以针对命名空间中的一个变量,也可以用于声明整个命名空间,具体比如:

  usingnamespaceJia;

  flag=0;//使用甲定义的变量flag

  Yi::flag=false;//使用乙定义的变量flag

  如果命名空间Jia中还定义了其他的变量,则同样具有flag变量的效果,在using声明后,如果出现未具体指定命名空间的命名冲突变量,则默认采用Jia命名空间中的变量。命名空间内部不仅可以声明或定义变量,对于其它能在命名空间以外声明或定义的实体,同样也都能在命名空间内部进行声明或定义,比如类的声明或定义、函数的声明或定义、typedef等都可以出现在命名空间中。

  下面笔者给出命名空间完整示例代码让大家参考参考,具体代码如下所示:

  #include<stdio.h>

  //将类定义在命名空间中

  namespacediy{

  classStudent{

  public:

  char*name;

  intage;

  floatscore;

  public:

  voidsay(){

  printf("%s的年龄是%d,成绩是%f\\n",name,age,score);

  }

  };

  }

  intmain(){

  diy::Studentstu1;

  stu1.name="小明";

  stu1.age=15;

  stu1.score=92.5f;

  stu1.say();

  return0;

  }

  输出结果:

  小明的年龄是15,成绩是92.500000

  以上就是命名空间完整示例代码。

  本次C++基础之命名空间的讲解到此就暂告一段落,如果以后有什么相关内容进行补充或者修改的话,笔者会继续在此进行相关内容的补充或者修改的工作,同时也欢迎大家对本次的讲解提出自己的建议和补充。最后笔者希望本次的讲解对大家学习C++能够起到一定的帮助作用!

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程