我在课堂上被告知,在单继承的情况下,VTBL 包括类可以响应的所有虚函数。下图应说明这一点。
在多重继承中,我被告知 VTBL 包括在该类中首先定义的所有虚函数或在该类中已被覆盖的虚函数。这意味着在运行时您必须使用分派算法搜索正确的方法实现。
我不完全确定为什么存在这种差异。为什么在多重继承的情况下 VTBL 不能包含类可以响应的所有虚函数(就像在单继承的情况下一样)?这应该会加快这个过程,因为我们不必在整个继承层次结构中在运行时寻找方法实现。
任何人都可以为我澄清这一点吗?
编辑:当我提到多继承的调度算法时,我指的是以下内容:
只是为了澄清:注意我们必须如何遍历层次结构来搜索实现,而不是仅仅去当前类的 VTBL 并调用跳转到方法。