我正在开发一个 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
}
}
我想到的解决方法之一是使用 C::foo() 内的 B::foo() 从 C 调用父级方法。这可行,但开发人员需要记住在方法主体中添加调用。
另一种方法是定义一个新的虚拟方法,子级将重写该方法,而父级将在其“OnKeyPress”方法中调用该方法。
谢谢你,
3mpty。
您必须显式调用基类方法。
class C : public B
{
virtual void OnKeyPress(event e)
{
B::OnKeyPress(e);
// Do stuff
}
};
只是重新阅读你的问题......
最好的办法是在 B 中实现方法,最后调用由 C 实现的附加受保护虚拟方法。
i.e.
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
}
};
如果您想强制任何后代覆盖它,您可以将 B 中的AdditionalKeyStuff(...) 设为纯虚拟。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)