首页 > 试题广场 >

多态类中的虚函数表建立在()

[单选题]
多态类中的虚函数表建立在()
  • 编译阶段
  • 运行阶段
  • 构造函数被调用时进行初始化的
  • 类声明时
       是在编译时创建的的虚函数表,编译器对每个包含虚函数的类创建一个虚函数表(vtable),在vtable中,放置这个类的虚函数地址。编译器另外还为每个特定类的对象提供了一个虚表指针(即vptr),这个指针指向了对象所属类的虚表。
在程序运行时,根据对象的类型去初始化vptr,从而让vptr正确的指向所属类的虚表,从而在调用虚函数时,就能够找到正确的函数。
发表于 2019-09-29 07:12:57 回复(0)
F**k 36*
发表于 2019-08-24 09:11:33 回复(0)

当一个类中包含虚函数时,编译器会在编译阶段为这个类生成虚函数表(virtual function table)。虚函数表是一个存储了虚函数地址的数组,每个虚函数在表中占据一个位置。对于包含虚函数的类,编译器会为每个类生成一个对应的虚函数表。

同时,编译器会在这个类的对象的内存布局中安排一个指向虚函数表的指针,通常称为虚函数指针(vptr)。这个指针指向该类的虚函数表,在对象被创建时初始化。

当进行虚函数调用时,实际调用的函数取决于对象的实际类型而不是指针或引用的类型。在运行时,程序会根据对象的实际类型通过虚函数指针找到对应的虚函数表,然后从表中取出对应虚函数的地址进行调用。这就是所谓的动态绑定或者运行时多态性。

因此,虚函数表的建立发生在编译阶段,并伴随着对象的创建和初始化。这个机制允许在运行时根据对象的实际类型来确定调用的函数,实现了多态性。

发表于 2023-11-10 17:20:09 回复(0)
多态中的虚函数表建立在编译阶段
发表于 2022-07-05 22:55:54 回复(0)
对象初始化(编译器给一个虚表指针) 虚表指针指向虚基类表(含有虚函数的地址),再调用对应的虚函数
发表于 2022-10-18 15:31:58 回复(0)
是在编译时创建的的虚函数表 A
发表于 2020-02-07 12:08:45 回复(0)