Sta*_*key 7

通过虚拟表.

阅读这篇文章,http://en.wikipedia.org/wiki/Virtual_table.

我可以在这里解释一下,但维基百科做得比我做得好.

  • 看完那个页面后,我觉得这对初学者来说太可怕了.它包含的信息不足以使它变得非常危险.关于效率的部分是彻头彻尾的误导,它链接到的论文是从1996年开始的(这已经有十多年了,从gcc 2.96开始(这甚至不算是一个有效的C++编译器,更不用说现代的C++编译器了)).关于替代方案的部分对于虚拟调度的相对讨论很有用,但是**绝对不适用于C++(这对初学者来说并不明显). (2认同)

sbi*_*sbi 5

C++标准没有规定如何实现虚函数机制.

也就是说,我认为所有当前的C++编译器都使用虚拟表.
为包含至少一个虚函数的类执行此操作的常用方法是使用指向所谓虚拟表的隐藏指针,其中特定类的虚函数的地址以编译器特定的顺序输入.
然后,每个构造函数将此隐藏指针设置为它所属的类的虚拟表.