using的三种使用方法

① 命名空间的使用 - 为了防止命名冲突
    例如: using namespace std; 或者 std::加具体的类方法
② 在子类中引用基类成员
    示例:
    class Base {
    public:
        Base():value(55) {}
        virtual ~Base() {}
        void Test1(void) { cout << "Base Test1" << endl; }
    protected:
        int value;
    };
    class Derived : private Base { // 私有继承,基类中的所有变量和函数都不可再子类中直接调用
    public:
        using Base::value; // 在public处用 using 声明之后,在子类中就可以使用基类的 value 变量了
        using Base::Test1; // 子类中可以调用基类中所有Test1的同名接口 注意: using 只是引用,不参与形参的指定,所以Test1的所有同名重载函数都可以调用
    };
③ 别名指定,功能基本与typedef类似,但是也有差异,C++11 中,鼓励用using而不用typedef
    示例: using Myint = int; Myint a; 等价于 int a;
    using 和 typedef 的差异之处:
        在定义一个函数指针别名时,使用 using 的可读性比 typedef 更强
            示例:
                using FP = void(*)(int, const string&);
                typedef void(*FP)(int, const string&);
                FP f; // 表示 f 是一个返回值为 void, 第一个参数为int类型,第二个参数为const string&类型的函数指针。
                using FP2 = std::string (FOO::*)(const std::string&);
                typedef std::string (FOO::*FP2)(const std::string&);
                FP2 f2; // 表示 f2 是一个FOO类中的成员函数,它的返回值为std::string类型,接受一个参数,类型为const std::string&类型
        using 可以用来定义模板别名,而 typedef 是做不到的。
            示例:
                typeplate <typename T>
                using VEC = MyVector<T, MyAlloc<T>>;
                VEC<int> vec; // ok
                typeplate <typename T>
                typedef MyVector<T, MyAlloc<T>> VEC;
                VEC<int> vec; // fail

参考链接:C++ 中using 的使用_c++ using-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值