摘要: 参考:http://blog.csdn.net/haoel/article/details/3081328,http://blog.csdn.net/haoel/article/details/3081385前言 07年12月,我写了一篇《C++虚函数表解析》 的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这也是我为什么 再写一篇续言的原因。因为,在上一篇文章中,我用了的示例都是非常简单的,主要是为了说明一些机理上的问题,也是为了图一些表达上方便和简单。不想,这篇 文章成为了打开C++对象模型内存布局的一个引子 阅读全文
posted @ 2012-07-15 19:25 Mr.Rico 阅读(251) 评论(0) 推荐(0)
摘要: 参考:http://www.cnblogs.com/itech/archive/2009/02/27/1399996.html一 虚继承1) 代码:#includeusingnamespacestd;classB{public:inti;virtualvoidvB(){cout(pB);pGD->i=10;pGD->x=20;pGD->y=30;pGD->a=40;PrintMemberAndVT(pGD);deletepGD;}6)验证代码结果:7)总结:虚继承,使公共的基类在子类中只有一份,我们看到虚继承在多重继承的基础上多了vbtable来存储到公共基类的偏移。二 阅读全文
posted @ 2012-07-15 18:19 Mr.Rico 阅读(721) 评论(0) 推荐(0)
摘要: 之前有对虚函数机制的讲解,见这先讨论是多级继承的虚函数表。首先是没有函数覆盖的情况,继承方式如下图所示:对于实例DDerive dd;其所对应的虚函数列表是:测试代码如下:View Code classBase{public:typedefvoid(Base::*Fun)();virtualvoidf(){Funq=&Base::f;cout<<"Base::f->"<<(int)*(void**)&q<<endl;}virtualvoidg(){Funq=&Base::g;cout<<" 阅读全文
posted @ 2012-07-15 17:24 Mr.Rico 阅读(670) 评论(0) 推荐(0)
摘要: C++中的虚函数机制 虚函数的定义:虚函数必须是类的非静态成员函数(且非构造函数),其访问权限是 public(可以定义为 private or proteceted, 但是对于多态来说,没有意义)。在基类的类定义中定义虚函数的一般形式:virtual 函数返回值类型 虚函数名(形参表){ 函数体 }虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义(形式也是:virtual 函数返回值类型 虚函数名(形参表){ 函数体 }),在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口,不同定 阅读全文
posted @ 2012-07-15 14:06 Mr.Rico 阅读(2128) 评论(0) 推荐(1)