C++易错知识点笔记(四)名字空间

作用域

1,全局作用域, 名字空间域
2,局部作用域,块作用域
3,类域

数据隐藏

在不同的作用域可以定义多个相同名称的变量,在访问时只访问本作用域的变量,屏蔽更大作用域的变量。

名字空间

1,一种作用域的划分,通常用于区分项目中的模块与组件,可以在命名空间中定义变量与函数。
(1)定义

namespace U_fun1
{
    int age=10;
};//命名空间U_fun1中有一个变量age
namespace U_fun2
{
    int age=11;
};//命名空间U_fun2中也有一个变量age

(2)使用

cout<<U_fun1::age<<endl;
cout<<U_fun2::age<<endl;//使用时加上命名空间域

2,关键字namespace,可以分开使用,例如:

namespace U_fun1
{
    int age=10;
};//命名空间U_fun1中有一个变量age
namespace U_fun1
{
    int high=120;
};//命名空间U_fun1里面还有一个变量high,也就是说明明空间里的变量不必全定义在一起,也可以分开定义

3,命名空间可以嵌套,即在命名空间中可以再嵌套定义命名空间。
(1)定义

namespace U_fun1
{
     namespace U_U_fun1
     {
         int age=10;
     };
};//命名空间U_fun1中有一个变量age

(2)使用

cout<<U_fun1::U_U_fun1::age<<endl;

4,命名空间可以取别名
例如3中所定义的名字空间U_fun1::U_U_fun1,可以给他取一个别名

namespace n=U_fun1::U_U_fun1;

使用

cout<<n::age<<endl;

5,命名空间作用域与全局作用域的数据隐藏

int age=5;//该age表示全局作用域中的age
namespace U_fun1
{
    int age=10;//该age表示U_fun1中的age
    void fun()
    {
        age=20;//命名空间内部的函数中的该语句修改的是该命名空间中的age(符合数据隐藏的原理)
        ::age=9;//该语法就会修改全局作用域中的age
    }    
};

名字空间的使用

关于如下的命名空间的使用

int age=5;//该age表示全局作用域中的age
namespace U_fun1
{
    int age=10;//该age表示U_fun1中的age
    void fun()
    {
        age=20;//命名空间内部的函数中的该语句修改的是该命名空间中的age(符合数据隐藏的原理)
        ::age=9;//该语法就会修改全局作用域中的age
    }    
};

1,如前文所讲的使用方法,直接命名空间名::变量名/函数名。,例如cout<<U_fun1::age;,这种方法更加推荐,不会产生二义性
2,在要使用某个命名空间时先声明,例如:using namespace U_fun1;接下来cout<<age;访问的就直接是U_fun1名字空间中的变量了,不过可能会产生二义性。例如如果在程序一开始就声明在整个程序中都用U_fun1中的变量,U_fun1中有age变量,同时又定义了一个全局变量age,这时候数据隐藏的原理不适用,那么在使用age变量的时候就会产生二义性,编译会报变量不明确的错误。
3,提前声明使用具体的某个变量using U::fun1::age,接下来也可以直接通过age直接访问

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值