10 2022 档案
摘要:系统基于32位,MSVC编译器,VS开发工具 1、上篇讲到菱形继承,我们发现菱形继承会导致有两份的基类TypeA子对象,因为TypeB继承了TypeA,TypeC也继承了TypeA ,所以TypeB子对象和TypeC子对象都会包含TypeA部分。 可以通过虚继承保持只有一个TypeA子对象,至于如何
阅读全文
摘要:系统基于32位,MSVC编译器,VS开发工具 1、之前看到的都是简单一点的类型继承,现在看下另外一个例子,菱形继承(又称钻石继承)。一个TypeA基类,TypeB和TypeC继承TypeA,TypeD同时继承TypeB和TypeC。 class TypeA { public: char a1 = 1
阅读全文
摘要:系统基于32位,MSVC编译器,VS开发工具 1、上篇直接通过类型对象调用成员函数,这种方式无法实现多态。所谓多态意思对函数的调用呈现出不同的形态。 下面这个例子中 a_ptr为指向a_obj的指针,当调用虚函数时,不再像之前一样直接调用了,而是先从虚函数表获取函数地址间接调用。 而如果是调用非虚函
阅读全文
摘要:系统基于32位,MSVC编译器,VS开发工具 1、通过对象对成员函数的调用,默认会给参数传进去一个this指针,该指针为对象的首地址,这个过程通常被编译器隐藏起来了。 对象直接调用成员函数,编译器在编译器就会直接获取到函数地址,汇编语言生成的就是call 函数地址,会有一个寄存器(很多情况是ECX)
阅读全文
摘要:系统基于32位,MSVC编译器,VS开发工具 1、一个简单的类型TypeA,类型对象a_obj总共占8个字节。char类型a1占1个字节,但是为了考虑到32位系统存储效率,所以a1变量后面会分配3个字节,用于内存的4字节对齐。 a2变量占用4个字节,对象a_obj的地址等于a1的地址。成员函数Typ
阅读全文

浙公网安备 33010602011771号