07_using在c++中的用法

本文深入探讨C++中命名空间的使用,包括简化成员访问、使用整个命名空间、指定使用具体成员以及处理函数重载。同时,讲解了如何解决不同命名空间中同名成员的二义性问题。

1、简化了命名空间的成员访问

namespace veryLongName {
    int a=100;
    void func(){cout<<"hello namespace"<<endl;}
}
void test07()
{

    //使用veryLongName命名空间
    using namespace veryLongName;

    //出现的变量 从当前作用寻找a,如果找不到在从veryLongName命名空间中找
    cout<<"a = "<<a<<endl;
    func();
}

2、using 使用整个命名空间

namespace veryLongName {
    int a=100;
    void func(){cout<<"hello namespace"<<endl;}
}
void test07()
{
    int a=200;
    //使用veryLongName命名空间
    using namespace veryLongName;

    //出现的变量 从当前作用寻找a,如果找不到在从veryLongName命名空间中找
    cout<<"a = "<<a<<endl;//访问的是局部变量中的a
    cout<<"a = "<<veryLongName::a<<endl;//访问的是veryLongName的a
    func();
}

3、using 指明使用命名空间中的具体成员。(了解)

注意:using直接使用 命名空间中的成员 会和 局部变量冲突

注意:using直接使用 命名空间中的成员 不会和 全局变量冲突

namespace veryLongName {
    int a=100;
    void func(){cout<<"hello namespace"<<endl;}
}
int a = 200;
void test07()
{
    //using直接使用 命名空间中的成员 不会和 全局变量冲突
    using veryLongName::a;

    cout<<"命名空间中a = "<<a<<endl;//命名空间中的成员 100
    cout<<"全局变量中a = "<<::a<<endl;//200

    //但是func使用的时候 必须加作用域
    veryLongName::func();
}

4、using声明碰到函数重载(了解)

namespace A {
    //函数重载 函数名+参数 组合代表是函数的入口地址
    void func(){cout<<" 无参的func"<<endl;}
    void func(int a){cout<<" int的func"<<endl;}
    void func(int a,int b){cout<<" int int的func"<<endl;}
}

void test08()
{
    //using指明 使用 A中的func 会对 所有的func起作用
    using A::func;
    func();
    func(10);
    func(10,20);
}

运行结果:

5、不同命名空间中的 同名成员 使用的时候注意 二义性

namespace A {
    int a = 10;
}
namespace B {
    int a = 20;
}
void test09()
{
    //此处的a 不知道是A还是B中a
    //cout<<"a = "<<a<<endl;//err

    //解决方法
    cout<<"A::a = "<<A::a<<endl;//100
    cout<<"B::a = "<<B::a<<endl;//200
}

总结:

1、命名空间的定义( 不能在 函数内 定义命名空间)

2、使用命名空间的成员 最安全的方式 命名空间名::成员名

3、using namespace 命名空间名;使用整个命名空间 (重要)

using namespace A;

4、单独 使用命名空间中的具体成员:using 命名空间名::成员名;

using A::a;

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值