【发布时间】:2015-10-20 20:31:06
【问题描述】:
我在简明扼要地表达这个问题时遇到了问题,但基本上一个类中的一个函数可能是继承链中的最后一个类,也可能不是。在这个函数内部,如果类级函数是继承链中的最后一个,则将调用第二个函数。展示我在说什么比解释它容易得多,所以:
假设我有 Z 课。
Z 派生自 Y,Y 派生自 X,X 派生自 W。
所有类都有一个名为 Execute() 的虚函数。
Z.Execute() 要求 Y.Execute() 结束,这就要求 X.Execute() 结束,这要求 W.Execute() 结束。
因此,Z 的 Execute() 函数如下所示:
void Z::Execute(void)
{
Y::Execute();
// do Z's stuff!
return;
}
同样,Y 的 Execute() 函数看起来像:
void Y::Execute(void)
{
X::Execute();
// do Y's stuff!
return;
}
在继承链中以此类推。
但是 Y、X 和 W 都是抽象的,因此每个都可以被实例化,并且可能是也可能不是继承链中的最后一个类。
这是我需要知道的。最后的 Execute() 需要调用 DoThisAtEndOfExecute()。 DoThisAtEndOfExecute() 需要在类内部调用,即。它不会公开。
所以不能在 X 的 Execute() 中,因为如果类是 Y 的话,会调用得太早。它不能在 Y 的 Execute() 中,因为类可能是 Z。它不能在 Z 的 Execute() 中,因为如果类是 Y、X 或 W,则永远不会调用该函数。
那么有没有办法让一个类判断它是否是从 FROM 继承的呢?基本上,相当于:
if (!IAmTheParentOfSomething)
DoThisAtEndOfExecute();
这是怎么做到的?我承认更简单的方法是让包含该类的函数执行:
X.Execute();
X.DoThisAtEndOfExecute();
但这并不是这段代码的真正选择。
【问题讨论】:
-
可以保护成员函数。这样,它只对声明类及其派生类可用。就像你想要的那样,它介于公共和私人之间。
标签: c++ class inheritance children