子类和父类的虚函数表同一个吗
时间: 2024-06-05 17:09:45 浏览: 22
在C++中,每个类都有一个虚函数表,该表存储了该类中的虚函数地址。如果一个类派生自另一个类,则该派生类将包含其父类的虚函数表和自己的虚函数表。在这种情况下,子类和父类的虚函数表是不同的。
如果子类重写了父类的虚函数,则在子类的虚函数表中将包含重写的函数地址。当通过指向子类对象的父类指针调用虚函数时,实际上会调用子类中的虚函数。这是因为在运行时,虚函数表将被查找并确定将调用哪个函数。
需要注意的是,虚函数表是特定于编译器实现的,因此不同的编译器可能会有不同的虚函数表实现方式。
相关问题
C++子类和父类共享虚函数表吗
在C++中,每个类都有一个虚函数表,用于存储该类的虚函数地址。当一个类派生自另一个类时,它将继承该父类的虚函数表。
子类和父类共享虚函数表,也就是说,子类和父类的虚函数表是相同的。这是由于在子类中,它继承了父类的虚函数表,并添加了自己的虚函数地址。因此,子类和父类都可以使用相同的虚函数表来调用它们的虚函数。这也是C++多态性的实现方式之一。
子类重写了父类的虚函数后,子类会拷贝父类的虚函数表吗?
在继承中,如果子类重写了父类的虚函数,那么子类会在自己的虚函数表中生成一个新的虚函数地址,并且该地址会覆盖父类中相应虚函数的地址。因此,子类不会复制父类的虚函数表,而是会在自己的虚函数表中创建一个新的虚函数地址。这样,在程序运行时,当通过父类指针或引用调用虚函数时,会根据对象的实际类型找到相应的虚函数地址,从而调用正确的虚函数。