C++ using 的用法

  1. 命名空间

    using namespace 命名空间;
    
  2. 类型别名(C++11)

    using INT = int;
    
  3. 改变从基类继承来的成员的访问级别

    class base {
    public:
        int func(int);
        int data_;
    };
    
    class son : private base {
    public:
        using base::func;
    protected:
        using base::data_;    
    };
    

    fun(int x)由private变成public(注意:using不指定参数列表)
    b由public变成protected

  4. 让派生类对基类中所有的重载函数都可见,而不是隐藏

    class base {
    public:
    	void func()
    	{
        	cout << "func1()" << endl;
    	}
    	void func(int)
    	{
        	cout << "func2()" << endl;
    	}
    };
    
    class son : public base {
    public:
    	using base::func;
    	void func(int x, int y)
    	{
        	cout << "func()3" << endl;
    	}
    };
    

    若没有using base::func;,func()和func(int)将会被隐藏

  5. using可让派生类继承直接基类所有的构造函数

    class base {
    public:
        base() {}
        base(string s, int a) {}
    };
    
    class son : public base {
    public:
        using base::base;
    
    private:
        string str_;
        int num_;
    };
    
    //等价于:
    class son : public base {
    public:
        son():base() {}
        son(string s, int a): base(s, a) {}
    };
    

    继承直接基类所有的构造函数,对于基类的每个构造函数,编译器都在派生类中生成一个形参完全相同的构造函数。
    使用继承来的构造函数时,如果派生类有自己的数据成员,则这些成员将被默认初始化。
    using不能指定explicit和constexpr。

  6. using声明和using 编译指令的区别

    namespace zhao {
    	class A;
    }
    

    using 声明:using zhao::A;
    using 编译:using zhao,命名空间里得所有标识符可用。

    使用using 声明时,如果某个名称已经声明了,就不能使用using导入相同的名称。
    using 编译指令导入所有的名称,如果与局部名称发生冲突,则局部名称称将覆盖名称空间版本,而编译器不会发出警告。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值