【聚杰网C++】细谈C++多态性的“动”与“静”
| // 验证首地址 C11 obj110; C11 obj111; printf("obj110 的地址:%x ", &obj110); printf("obj111 的地址:%x ", &obj111); printf("obj110 虚表的地址:%x ", *(&obj110)); printf("obj111 虚表的地址:%x ", *(&obj111)); |
结果是:
obj110 的地址:12ff7c
obj111 的地址:12ff78
obj110 虚表的地址:432098
obj111 虚表的地址:432098
由上面的结果我们可以验证:
1、一个类一个VTABLE,而不是一个对象一个VTABLE。
2、对象的首地址的内容就是VTABLE的地址。
总结一下:
C++的多态性包括其概念和实现,本文从编译器生成的代码来讨论C++多态特性,特别说明了为什么多态特性被称为“动态联编”,它和“静态联编”有什么不同,它们的“动”与“静”体现在哪里。另外还对对象的虚表做了些验证。好了,希望本文能对你认识C++的多态性有一定的帮助!





