namespace用法

命名冲突是指在相同的作用域内出现多个同名的类、函数或变量。
使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值