3mp*_*pty 3 c++ oop inheritance
我正在开发一个 c++ 应用程序,但我面临一个问题:我有一个从抽象类 A 派生的类 B,它具有一些事件处理方法。第三个类 C 派生自 B,并且必须重新实现一些 B 方法。有没有办法在调用 C 的方法之前隐式调用 B 的方法?
类图:
class A
{
virtual void OnKeyPress(event e)=0;
};
class B : public A
{
virtual void OnKeyPress(event e)
{
print("Keypressed: "+e)
};
};
class C : public B
{
void OnKeyPress(event e)
{
//DoSomething
}
}
Run Code Online (Sandbox Code Playgroud)
我想出的解决方法之一是使用 C::foo() 中的 B::foo() 从 C 调用父方法。这是可行的,但开发人员需要记住在方法的主体中添加调用。
另一种方法是定义一个新的虚拟方法,子进程将覆盖该方法,父进程将在其“OnKeyPress”方法中调用该方法。
谢谢,3mpty。
您必须显式调用基类方法。
class C : public B
{
virtual void OnKeyPress(event e)
{
B::OnKeyPress(e);
// Do stuff
}
};
Run Code Online (Sandbox Code Playgroud)
只需重新阅读您的问题......
最好的办法是在 B 中实现方法,该方法最后调用一个额外的受保护的虚拟方法,由 C 实现。
IE
class B : public A
{
protected:
virtual void AdditionalKeyStuff(event e) { }
public:
virtual void OnKeyPress(event e)
{
// Do B Stuff
// Finally give decendants a go.
AdditionalKeyStuff(e)
}
};
class C : public B
{
protected:
virtual void AdditionalKeyStuff(event e)
{
// Do only C stuff
}
};
Run Code Online (Sandbox Code Playgroud)
如果您想强制任何后代覆盖它,您可以使 B 中的 AdditionalKeyStuff(...) 成为纯虚拟的。
| 归档时间: |
|
| 查看次数: |
2565 次 |
| 最近记录: |