委托构造/继承构造
// 委托构造
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