虚拟方法调用如何在C ++中工作?

时间:2010-09-27 13:09:25

标签: c++ oop inheritance virtual

虚拟方法调用如何在C ++中运行?

4 个答案:

答案 0 :(得分:7)

通过虚拟表。

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:0)

每个至少有一个虚方法的类都有它的虚拟表 - 指向该类方法的函数的指针表。

它广泛用于COM。

答案 3 :(得分:0)

使用VTables和函数指针。虚函数的函数指针将列在VTable中 MFC使用消息映射而不是虚函数,这减小了大小限制。如果我们使用几个虚函数,VTable将以大尺寸结束。