石家庄城乡建设局网站,中国建设部网官方网站,网站优化包括,东莞公司建网站要多少费用有了虚函数#xff0c;会在类的对象增加一个指针#xff0c;该指针就是虚函数表指针_vfptr;虚表本质就是函数指针数组,虚表里面存放着该对象的虚函数的地址#xff1b;
派生类继承有虚函数基类的对象模型
子类继承父类的虚表指针时#xff0c;是对父类的虚表指针进行了拷… 有了虚函数会在类的对象增加一个指针该指针就是虚函数表指针_vfptr;虚表本质就是函数指针数组,虚表里面存放着该对象的虚函数的地址
派生类继承有虚函数基类的对象模型
子类继承父类的虚表指针时是对父类的虚表指针进行了拷贝。二者指向两张不同的表。子类没有重写父类的虚函数时候子类的虚函数表和父类是完全一样的。
如果子类重写了基类中某个虚函数用派生类自己的虚函数地址覆盖虚表中的基类的虚函数地址。
派生类自己新增的虚函数按其在派生类中的声明次序增加到派生类虚表的最后。 多态的原理基类的指针或者引用指向谁就去用谁的虚函数表找到对应的虚函数进行调用。
问题一同一个类的不同对象的虚函数指针是否一样虚函数表是否一样
是一样的。它们的对象的虚函数指针都指向同一个虚表虚函数指针都是一样的 问题二虚表在哪个阶段生成虚表存放在哪
虚函数我们知道存放在虚表但是虚表存放在哪呢其实存放在字符常量区。虚表在编译阶段就形成了。 注意在C中,内置类型的地址大小是相同的,无论在32位操作系统还是64位操作系统上都是如此.内置类型包括int、double、float、char、bool等常见的基本数据类型,它们的大小在不同的编译器和操作系统下可能略有不同,但它们的地址大小始终相同,通常是4个字节或8个字节.
在32位操作系统上,内置类型的地址通常是32位,也就是4个字节.而在64位操作系统上,内置类型的地址通常是64位(8个字节).这意味着在64位操作系统上,每个指针可以表示的内存地址范围比32位操作系统更大,因此可以更高效地操作大型数据结构.