细谈C++多态性的“动”与“静”
t; << endl; } }; class C11 : public C1 ...{ public: void Test() ...{ cout << "call C11 Test()" << endl; } }; class C12 : public C1 ...{ public: void Test() ...{ cout << "call C12 Test()" << endl; } }; 我们可以知道 Test() 是虚函数,从C1派生的类必定有自己的虚表。而且根据别的资料,虚表指针是放在对象的首地址的,我们下面就来验证一下:
结果是: obj110 的地址:12ff7c obj111 的地址:12ff78 obj110 虚表的地址:432098 obj111 虚表的地址:432098 由上面的结果我们可以验证: 1、一个类一个VTABLE,而不是一个对象一个VTABLE。 2、对象的首地址的内容就是VTABLE的地址。 总结一下: C++的多态性包括其概念和实现,本文从编译器生成的代码来讨论C++多态特性,特别说明了为什么多态特性被称为“动态联编”,它和“静态联编”有什么不同,它们的“动”与“静”体现在哪里。另外还对对象的虚表做了些验证。好了,希望本文能对你认识C++的多态性有一定的帮助! |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |