C++11/14/17新特性之 - 显示虚函数重载,显示禁用默认函数,强类型枚举

委托构造/继承构造

    // 委托构造
    class Base {
    public:
        Base() : value1(0) {}

        Base(int v) : Base() { // 委托 Base() 构造函数
            value2 = v;
        }

    public:
        int value1;
        int value2;
    };

    class subClass : public Base {
    public:
        using Base::Base; // 继承构造
    };

    void delegaAndInheritConsturctTest() {
        subClass s(2);  // 继承了基类的构造函数
        std::cout << s.value1 << std::endl;
        std::cout << s.value2 << std::endl;
    }

显示虚函数重载

    // 显示虚函数重载
    class Base1 {
        virtual void foo(int);
    };

    class SubClass : Base1 {
        virtual void foo(int) override; // RIGHT
        virtual void foo(float) override;  // ERROR,父类中没有改虚函数
    };

    class Base2 {
        virtual void foo() final;
    };

    class SubClass1 final : Base2 {
    }; // RIGHT

    class SubClass2 : SubClass1 {
    }; // ERROR, SubClass1已经是final类型,不能被继承

    class SubClass3 final : Base2 {
        virtual void foo(); // ERROR, foo已经是final
    }; // RIGHT

显示禁用默认函数

    // 显示禁用默认函数
    class Magic{
    public:
        Magic() = default; // default, 显示声明使用编译器生成的默认构造函数
        Magic(const Magic &rhs) = delete; // delete, 显示声明禁用编译器生成的默认拷贝构造函数
    };

强类型枚举

    // 强类型枚举,通过class限定作用域,通过显示指定long long为枚举值的实现类型,如果不指定,默认为int
    // 老C++没有作用域和指定实现类型的说法
    enum class Color : long long {
        RED = 2,
        YELLOW,
        BLUE,
        GREEN = 100,
        OTHER = 100
    };

    void newEnumTest(Color value) {
        if (Color::GREEN == Color::OTHER) {
            // 条件为真,处理这里
        }
        switch (value) {
            case Color::RED:
                break;
            case Color::YELLOW:
                break;
            case Color::BLUE:
                break;
            case Color::GREEN:
                break;
            //case Color::OTHER: // 与Color::GREEN一致
                //break;
            default:
                break;
        }
    }

参考:《现代C++教程:高速上手C++11 14 17 20》

https://github.com/changkun/modern-cpp-tutorial

猜你喜欢

转载自blog.csdn.net/u010323563/article/details/112725243