您的位置:首页 > 其它

namespace用法

2018-04-11 10:48 267 查看
命名冲突是指在相同的作用域内出现多个同名的类、函数或变量。

使用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.csdn.net/luoweifu/article/details/44142619
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  namespace