基类A有子类B,B也有子类C。A实现了一个虚方法doStuff(),B没有,也C确实。从C,我想调用A的实现doStuff()(我在C的实现中这样做,doStuff()但这并不重要。)我应该调用
A::doStuff();
或者:
B::doStuff();
第一个似乎更清楚,因为它指的是实际的实现。另一方面,如果我后来决定B需要doStuff()不同于A. 哪个更标准?哪个更危险?
我有点惊讶B::doStuff()没有触发任何警告,但我想根据定义B,即使它来自基类,它也有一个实现。基类和实现的链可以任意长和复杂吗?例如,如果我有Athrough Z,每个都是前一个的子类,我是否可以在链中的任何地方都有实现,并且调用任何类的方法是否只是“向上链”直到找到实现?