可能重复:
How to force child same virtual function call its parent virtual function first如何调用被覆盖的方法,所有派生类
我有一个类层次结构,其中每个派生类中重写一个给定的虚拟功能,并通过调用开始其实施在其父级中的一个。目标是让每个派生的实现都被执行,但我不喜欢我这样做。
例如,我有这个类:
class base
{
public:
void do_stuff() { do_something(); }
virtual void do_something() { }
};
然后我得到在几个层次上这个类:
class derived_10:
public derived_9 // which inherit from derived_8 and so on until derived_0
// which inherit from base
{
public:
virtual void do_something()
{
// this will also call derived_8::do_something() and so on
// until base::do_something()
derived_9::do_something();
// then, some stuff
}
};
我正在寻找一个解决方案,将确保所有derived_x: :do_something()将在调用base :: do_stuff()时按顺序调用,而不必期望派生类自己执行此操作。你有没有得到这种行为的最佳方式的想法?
为什么你的继承层次如此之深? – Cameron 2012-04-24 19:34:59
这个问题太糟糕了,以dup的形式结束。我即将发布一个答案。这个评论将不得不做。那么像[this](http://codepad.org/MtRoQ6Bg)这样的东西呢? – greatwolf 2012-04-24 19:49:41
@cameron,层次结构描述了游戏对象,如word_item < - renderable_item < - character < - monster < - playable_character < - hero。它没有10级的深度,但仍然变得相当大。 – Julien 2012-04-25 15:48:19