C++中的命名空间namespace

像这样导致命名冲突的情况还有很多,总结来说就是在相同的作用域内出现多个同名的类、函数或变量。

定义命名空间

【例1】

Hello.h

#pragma oncenamespace SH{class Hello{public:Hello(void);~Hello(void);public:void SayHello();};void HelloWord();}

Hello.cpp

#include "StdAfx.h"#include "Hello.h"#include <iostream>using std::cout;using std::endl;namespace SH{Hello::Hello(void){}Hello::~Hello(void){}void Hello::SayHello(){cout << "how are you!" << endl;}void HelloWord(){cout << "Hello World!" << endl;}}

Hello.cpp还可以定义成这样:

SH::Hello::Hello(void){}SH::Hello::~Hello(void){}void SH::Hello::SayHello(){cout << "how are you!" << endl;}void SH::HelloWord(){cout << "Hello World!" << endl;}

【例2】命名空间的定义也可以是不连续的,,如:

Hello.h

#pragma oncenamespace SH{class Hello{public:Hello(void);~Hello(void);public:void SayHello();};}void HelloWord();namespace SH{void Hello2Sunly();}

Hello.cpp

#include "StdAfx.h"#include "Hello.h"#include <iostream>using std::cout;using std::endl;SH::Hello::Hello(void){}SH::Hello::~Hello(void){}void SH::Hello::SayHello(){cout << "how are you!" << endl;}void HelloWord(){cout << "Hello World!" << endl;}void SH::Hello2Sunly(){cout << "Hello Sunly!" << endl;}

使用命名空间加命名空间的前缀和作用域运算附

#include "stdafx.h"#include <iostream>int main(){std::cout << "Hello World!" << std::endl;return 0;}

这种方式最安全,因为使用的每个变量都用命名空间的前缀指明了具体的版本。但比较麻烦,因为每次使用都要加前缀。

using声明

#include "stdafx.h"#include <iostream>using std::cout;using std::endl;int main(){cout << "Hello World!" << endl;return 0;}

using指示

#include "stdafx.h"#include <iostream>#include "Hello.h"using namespace std;using namespace SH;int main(){cout << "Hello World!" << endl;Hello2Sunly();return 0;}

这种方式将某一命名空间下的所有变量都注入进来了,这种方式使编程更简单了,不用把需要用到的变量一个一个地用using加进来,但又再次带来了命名冲突的危险,因为多个命名空间都提到当前的作用域下,又有可能发生重名的问题。

尝到你和你在一起的快乐,你是唯一能让我尝到酸甜苦辣的人。

C++中的命名空间namespace

相关文章:

你感兴趣的文章:

标签云: