C++新经典对象模型
文章平均质量分 57
《C++新经典对象模型》学习笔记
Last-Week
正在学习C++的小弱鸡
展开
-
辅助工具与vptr,vtbl创建时机
辅助工具与vptr,vtbl创建时机 辅助工具查看虚函数表 打开开发者命令行工具,使用cl命令,分析虚函数结构(cl是编译链接工具) cl /d1 reportSingleClassLayoutDerived MyProject.cpp 注意cl(这个是字母l), d1(这个是数字1) reportSingleClassLayoutDerived后面跟的是要查看的类名 最后面跟的是类所在的.cpp文件名 得到结果 MyProject.cpp class Derived size(8):原创 2022-04-26 00:12:33 · 415 阅读 · 0 评论 -
多重继承虚函数表分析
多重继承虚函数表分析 演示在多重继承下,虚函数表的样子 创建两个父类Base1 Base2,并创建Derived先后继承Base1 Base2 ,查看对于各个函数的调用结果 #include <iostream> using namespace std; class Base1 { public: virtual void f() { cout << "Base1::f()" << endl; } virtual void g() { cout <原创 2022-04-26 00:11:36 · 780 阅读 · 3 评论 -
虚函数表分析
虚函数表分析 结合上一次探究的代码,我们可以得到父类对象和子类对象内存布局示意图 对于上图的总结 包含虚函数的类才会有虚函数表,同属于一个类的对象共享这个虚函数表,但是各个对象都有各自的vptr(虚函数表指针),但是该指针所指向的地址相同(虚函数表首地址) 父类中有虚函数子类中也会有虚函数,即父类中有虚函数表子类中也会有虚函数表,即便子类并没有覆盖父类的任何虚函数 class Derive : public Base { public: // 空 }; sizeof(Derive) =原创 2022-04-26 00:09:25 · 77 阅读 · 0 评论 -
继承关系作用下虚函数的手工调用
通过虚函数表指针调用虚函数 创建一个父类,一个子类,尝试着通过虚函数表指针调用虚函数 #include <iostream> using namespace std; class Base { public: virtual void f() { cout << "Base::f()" << endl; } virtual void g() { cout << "Base::g()" << endl; } virtual void h()原创 2022-04-26 00:08:07 · 896 阅读 · 0 评论 -
虚函数表指针位置分析
虚函数表指针位置分析 #include <iostream> using namespace std; class A { public: int i; //一个成员变量,4字节 virtual void testfunc() {} //虚函数 }; int main() { A a; int ilen = sizeof(a); //8,一个成员变量 + 虚函数表指针(4 + 4 = 8) return 0; } a对象里有一个虚函数表指针vptr,还要一个成员变量原创 2022-04-26 00:06:51 · 236 阅读 · 0 评论