C++命名空间

来源:互联网 发布:办公软件相关书籍 编辑:程序博客网 时间:2024/06/10 07:53

一,先说下C++的using namespace std 

这句话就是告诉编译器这行之后的cout,cin函数等等都是std这个命令空间内定义的

二,再说下他的一般用法

1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:

std::cout << std::hex<< 3.4<< std::endl;

2、使用using关键字。
using std::cout;
using std::endl;
以上程序可以写成
cout << std::hex<< 3.4<< endl;
3、最方便的就是使用using namespace std;

例如:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:
cout << hex<< 3.4<< endl;

三,命名空间

所谓namespace,是指标识符的各种可见范围,为了解决C++中的名字冲突而引入的
什么是名字冲突呢?
比如,在文件x.h中有个类MyClass,
在文件y.h中也有个类MyClass,而在文件z.cpp中要同时
引用x.h和y.h文件的类MyClass。显然,按通常的方法是行不能的,

那怎么办呢?引入namespace即可。

  在x.h中的内容为// x.hnamespace MyNamespace1{   class MyClass   {   public:      void f();   private:      int m;   }};      在y.h中的内容为// y.hnamespace MyNamespace2{   class MyClass   {   public:      void f();   private:      int m;   }};   然后在z.cpp中引入x.h和y.h// z.cpp#include"x.h"   #include"y.h"   void z::f(){   //声明一个文件x.h中类MyClass的实例x   MyNamespace1::MyClass x;    //声明一个文件x.h中类MyClass的实例x   MyNamespace2::MyClass y;   //调用文件x.h中的函数f   x.f();   //调用文件y.h中的函数f   y.f();}      名字空间实质上是一个作用域。      通过上面的一个实例应该知道名字空间的作用了吧

四 ,下面是程序员的推荐写法

#include <iostream>using std::cin;using std::cout;using std::endl;template <typename T>T max (T a,T b){return ((a>b)?a:b);}int main(){double x,y;cin>>x>>y;cout<<"Max number is"<<(max(x,y))<<endl;cin>>x;}

五,自定义一个命名空间

namespace sdm {  const double book_version = 2.0;  class handle { ... };  handle& gethandle();}void f1(){  using namespacesdm;          // 使得sdm中的所有符号不用加修饰符就可以使用  cout <<book_version;         // 解释为sdm::book_version  ...  handle h =gethandle();       // handle解释为sdm::handle,                                // gethandle解释为sdm::gethandle ...                           }void f2(){  usingsdm::book_version;       // 使得仅book_version不用加修饰符就可以使用  cout <<book_version;          // 解释为sdm::book_version  ...  handle h =gethandle();        // 错误! handle和gethandle                                 // 都没有引入到本空间 ...                            }void f3(){  cout <<sdm::book_version;     // 使得book_version在本语句有效 ...                             double d =book_version;       // 错误! book_version不在本空间  handle h =gethandle();        // 错误! handle和gethandle都没有引入到本空间 ...                           }

六下面附上命名空间的两个通俗解释

一,比如在同一房间内,我叫小强,你也叫小强,在同一空间内名字就冲突啦,怎么区分他们,

办法就是我是张家的小强,你是李家的小强,就不冲突啦,这个张家.李家就是命名空间(相互独立的)

二,命令空间就像一个文件夹,其内的对象名就像一个文件,不同的文件夹内的文件可以重名,在使用重名的文件是,

只要求说明是哪个文件夹就行啦

呵呵,我这样解释,应该都懂啦吧

原创粉丝点击