C++学习day7之namespace

#include<iostream>
using namespace std;
/*命名空间为了大型项目开发,而引入的一种避免命名冲突的一种机制
 *比如说,在一个大型项目中,要用到多家软件开发商提供的类库。在
 *事先没有约定的情况下,两套类库可能存在同名的函数或是全局变量而
 *产生冲突。项目越大,用到的库越多,开发人员越多,这种冲突就会约
 *明显
 */
#if 0
int v=55;
int main()
{
/*
 *这里会输出5,这里局部变量会覆盖全局变量。但是这里有一点,
 *一个叫局部,一个叫全局。但是这里给你提出一个需求,我非要访问全局的怎么办
 *在C语言中,就是在你定义局部v的之前定义一个指针,但是文件一多,这个问题就
 *很难使用这种方法解决。这么办,于是C++就想到了命名空间这么一回事
 *你访问一个全局的,就是一个无名命名空间,他没有名字,就是用::,
 *;;作用域运算符,作用域运算符前面要放命名空间,
 */ 
    int *a=&v;
    int v=5;
    cout<<v<<endl;
    cout<<*a<<endl;
    cout<<::v<<endl;
}
#endif
/*
 * namespace是命名空间的关键字
 *namespace NAMESPACE
 *{
 *  全局变量 int q;
 *  数据类型 struct Stu{}
 *  函数 void func()
 *  其他命名空间 namespace
 *}
 */
#if 0
//如果没有命名空间就重定义了
namespace Space{
    int x;
    int y;
}

namespace Other{
    int x;
    int y; 
}
int main()
{
    //用这个可以把我们命令空间给解包了。解包到这个局部空间里面去。 
    //using namespace Space;
    //用这个也可以,但是这里只解包一个
#if 0
    using Space::x;
    //Space::x=200;
    x=200;
    //y=100;
    cout<<Space::x<<endl;
#endif
    
    /*
     *假设我们解包之后,跟本地的名字有冲突,如下
     *using namespace Space;
     *x=20;
     *int x,y;
     *这时,就要加作用域了。,或者加扩号 如下
     */ 

    {
        using namespace Space;
        x=100;
        y=1000;
    }
    {
        using namespace Other;
        x=200;
        y=2000;
    }
    int x,y;
    x=300;
    y=3000;
}
#endif

/*
 *命名空间支持嵌套
 *
 */
#if 0
namespace Space{
    int x;
    int y;

    namespace Other{
        int m;
        int n;
    }
}
int main()
{
    Space::Other::m=100;    
    return 0;
}
#endif

/*
 *这里会把这两个命名空间给合并
 *
 */
namespace Space{
    int x;
}
namespace Space{
    int y;
}
int main()
{
    using namespace Space;
    x=100;
    y=1000;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值