命名冲突是指在相同的作用域内出现多个同名的类、函数或变量。
使用namespace命名空间可以解决命名冲突的问题。
namespace的定义与使用
//Hello.h
namespace 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;
}
}
SH::Hello::Hello(void){}
SH::Hello::~Hello(void){}
void SH::Hello::SayHello()
{
cout << "how are you!" << endl;
}
void SH::HelloWord()
{
cout << "Hello World!" << endl;
}
namespace的定义也可以是不连续的
//Hello.h
namespace 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;
}
使用命名空间方法:
(1)加命名空间的前缀和作用域运算符
#include "stdafx.h"
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
return 0;
}
这种方式最安全,因为使用的每个变量都用命名空间的前缀指明了具体的版本。但比较麻烦,因为每次使用都要加前缀。
(2)using声明
#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
需要哪个变量时就声明哪个变量,这种方式相对较安全,也不至于太麻烦,只推荐的一种方式。用using引入的变量,其作用域从using指示开始一直到using指示所在的作用域结束。
(3)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加进来,但又再次带来了命名冲突的危险,因为多个命名空间都提到当前的作用域下,又有可能发生重名的问题。
参考博客:http://blog.youkuaiyun.com/luoweifu/article/details/44142619