多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?
参考答案:
多态类中的虚函数表(vtable)通常是在编译时(Compile-Time)建立的。虚函数表是一个存储虚函数地址的表,它用于支持动态绑定(dynamic binding)或运行时多态性(runtime polymorphism)。
在编译时,编译器会为每个包含虚函数的类生成一个虚函数表。这个表包含了类及其基类中所有虚函数的地址。当创建类的实例时,会在内存中为虚函数表分配空间,并将虚函数的地址填充到表中。这个过程是在编译时完成的,与运行时无关。
当程序运行时,通过对象的指针或引用调用虚函数时,会首先查找该对象的虚函数表。然后,根据虚函数表中的地址来调用相应的虚函数。这个过程是在运行时发生的,但虚函数表的建立是在编译时完成的。
因此,可以说多态类中的虚函数表是在编译时建立的,而虚函数的调用则是在运行时发生的。这种设计使得多态性能够在运行时根据对象的实际类型来调用相应的函数,实现了动态绑定的效果。