[c++11]final和override
final
final是一种修饰符,它可以用于类的成员函数和类本身。
当final修饰一个类时,表示该类不能被其他类继承;
而当final修饰一个成员函数时,表示该成员函数不能被派生类重写。
class Base {
public:virtual void foo() final; // 使用 final 修饰的虚函数
};class Derived : public Base {
public:void foo(); // 错误:无法重写被标记为 final 的函数
};class FinalClass final {// 不能被继承的类
};
Base类中的虚函数foo使用了final修饰,表示该函数不能被其派生类重写。
而FinalClass类使用了final修饰,表示该类不能被继承。
使用final修饰符可以帮助我们在设计类层次结构时更好地表达意图,并防止意外的继承和重写行为。这在某些情况下对于确保代码的安全性和正确性非常有帮助。
override
override 用于显式地告诉编译器某个成员函数是覆盖(override)了基类中的虚函数。
使用 override 关键字可以帮助开发者在编译时捕获一些常见的错误,例如拼写错误或者意外地不正确覆盖虚函数的情况。
class Base {
public:virtual void foo();
};class Derived : public Base {
public:void foo() override; // 明确表示该函数是覆盖了基类中的虚函数
};
Derived 类中的 foo 函数使用 override 关键字,表明它覆盖了 Base 类中的虚函数 foo。如果 Derived 类中的 foo 函数的签名与 Base 类中的 foo 函数不匹配,或者 Base 类中的 foo 函数并非虚函数,编译器会产生错误。
使用 override 可以提高代码的可读性和可维护性,同时避免一些潜在的错误。
它通常与虚函数一起使用,以确保派生类中的函数正确地覆盖了基类中的虚函数。