mar*_*jno 2 c++ oop virtual overriding
假设我们有一个具有虚方法的基类:
class BaseClass
{
virtual void MethodToOverride() const
{
DoSomething();
}
};
Run Code Online (Sandbox Code Playgroud)
一个派生类覆盖了该方法(取决于我们可以再次虚拟或不再虚拟的情况):
class DerivedClass : public BaseClass
{
void MethodToOverride() const
{
DoSomethingElse();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们犯了一个错误,例如定义MethodToOverride非const或错误的字符,我们只需定义一个新方法,例如:
void MethodToOverride() {} // I forgot the const
void MthodToOverride() const {} // I made a typo
Run Code Online (Sandbox Code Playgroud)
因此编译很好,但在运行时会导致不必要的行为.
有没有办法将函数定义为现有函数的显式覆盖,所以如果我错误地定义它,编译器会发出警告?像(我知道它不存在)的东西:
void MethodToOverride() const overrides BaseClass::MethodToOverride() const {}
Run Code Online (Sandbox Code Playgroud)
最好的方法是将方法声明为纯虚拟BaseClass
.
class BaseClass
{
virtual void MethodToOverride() const = 0;
};
Run Code Online (Sandbox Code Playgroud)
如果再次继承实现类(我将其视为半好的实践),则无法控制正确的实现.