C++ final类和override final之间的差异

C++ final类和override final之间的差异,c++,inheritance,C++,Inheritance,问题很简单,像这样使用final有什么区别 类基{ 公众: Base(){} 虚拟~Base(){} 虚拟空初始化(){} }; 类派生的final:公共基{ 公众: 派生(){} ~Derived(){} 虚空初始化()重写{} }; 像这样使用覆盖final 类基{ 公众: Base(){} 虚拟~Base(){} 虚拟空初始化(){} }; 派生类:公共基{ 公众: 派生(){} ~Derived(){} 虚空初始化()重写最终{} }; 在方法上使用final确保如果另一个类继承自该类

问题很简单,像这样使用
final
有什么区别

类基{
公众:
Base(){}
虚拟~Base(){}
虚拟空初始化(){}
};
类派生的final:公共基{
公众:
派生(){}
~Derived(){}
虚空初始化()重写{}
};
像这样使用
覆盖final

类基{
公众:
Base(){}
虚拟~Base(){}
虚拟空初始化(){}
};
派生类:公共基{
公众:
派生(){}
~Derived(){}
虚空初始化()重写最终{}
};

在方法上使用final确保如果另一个类继承自该类,则不允许它重写该方法


在类上使用final意味着该类根本无法从中派生。

在方法上使用final可确保如果另一个类从该类继承,则不允许它重写该方法


在类上使用final意味着该类根本无法派生。

第一种情况锁定该类。以下操作将导致错误:

class Derived2 : public Derived{};

第二种情况禁止从它继承的任何类重新定义
final
方法。

第一种情况锁定该类。以下操作将导致错误:

class Derived2 : public Derived{};

第二种方法禁止从它继承的任何类重新定义
final
方法。

final
on class表示该类不能从中派生<方法上的code>final表示无法在派生类中进一步重写该方法。@IgorTandetnik因此这与对派生类中的所有虚拟函数说
override final
相同?否。这样的类仍然可以派生(这样做可能不是特别有用,但仍然可能)。换句话说,
类派生:公共派生{}将在第二个示例中编译,并在第一个示例中产生错误。@D-RAJ
override final
是多余的。重写虚拟成员函数时,将其标记为
override
以重写并允许在更派生的类中进一步重写,或将其标记为
final
以重写并防止进一步重写。类上的
final
表示该类不能从中派生<方法上的code>final
表示无法在派生类中进一步重写该方法。@IgorTandetnik因此这与对派生类中的所有虚拟函数说
override final
相同?否。这样的类仍然可以派生(这样做可能不是特别有用,但仍然可能)。换句话说,
类派生:公共派生{}将在第二个示例中编译,并在第一个示例中产生错误。@D-RAJ
override final
是多余的。重写虚拟成员函数时,将其标记为
override
以重写并允许在更派生的类中进一步重写,或将其标记为
final
以重写并防止进一步重写。