内存布局

跟我一起学习C++虚函数--第五篇

懵懂的女人 提交于 2019-12-24 14:40:02
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在前一篇,我们讨论了在多重继承情况下,具有虚函数的类的内存布局情况。本篇将进一步探索在多重虚拟继承情况下的内存布局情况。 在讨论多重虚拟继承前,我们先对《 浅析GCC下C++多重继承 & 虚拟继承的对象内存布局 》中的例子进行扩充。先看看带有虚函数的单一虚拟继承情况下类的内存布局。 先看例子: #include <iostream> using namespace std; class Top { public: virtual void x(){cout << "top x" << endl;} virtual void print0(){cout << "top print" << endl;} public: int a; }; class Left:virtual public Top { public: virtual void x(){cout << "left x" << endl;} virtual void print1(){cout << "left print" << endl;} public: int b; }; int main() { /*first part*/ cout << sizeof(Top) << "\t" << sizeof(Left) << endl;//输出:8

跟我一起学习C++虚函数--第四篇

无人久伴 提交于 2019-12-24 14:24:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在前一篇,我们讨论了在多 继承情 况下,具有虚函数的类的内存布局情况。本篇将进一步探索在多重继承,即具有重复继承的情况下的内存布局情况。在阅读本篇和下一篇之前,建议先阅读本博客另一篇博文《 浅析GCC下C++多重继承 & 虚拟继承的对象内存布局 》。 先说一点题外话,细心的读者可能会发现,我们在探索不同情况下类的内存布局时,总是先通过查看类的大小以及其中各个成员变量的地址来进行分析,然后再具体定位某一位置的值。从最原始的内存中的对象分布,我们可以获得最深入最有效的理解。 OK,请看例子: #include <iostream> using namespace std; class Top { public: virtual void x(){cout << "top x" << endl;} virtual void print0(){cout << "top print" << endl;} public: int a; }; class Left:public Top { public: virtual void y(){cout << "left y" << endl;} virtual void print1(){cout << "left print" << endl;} public: int b;