C++11/14/17 new features-display virtual function overloading, display disabled default functions, strongly typed enumeration

Delegate construction/inheritance construction

    // 委托构造
    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;
    }

Show virtual function overloading

    // 显示虚函数重载
    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

Show disable default functions

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

Strongly typed enum

    // 强类型枚举,通过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;
        }
    }

Reference: "Modern C++ Tutorial: C++11 14 17 20 High Speed"

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

Guess you like

Origin blog.csdn.net/u010323563/article/details/112725243