C++多态实现中的指针修正
来源:互联网 发布:粉猪家jk淘宝名 编辑:程序博客网 时间:2024/06/15 02:46
昨天看了下耗子叔的c++虚函数表的实现,想起看《Inside_the_C++_Object_Model 》里指针修正的过程,做了下试验,发现将子类地址赋值给基类指针的过程中确实会将基类指针进行修正,谷歌上搜了搜没发现有中文博客涉及这个内容,就在这里做个记录吧。
首先,先看懂这两篇关于虚函数表实现的文章
C++ 虚函数表解析
C++ 对象的内存布局
然后是《Inside_the_C++_Object_Model》3.4章关于继承时成员与虚函数表在内存中的分布情况
上代码
#include<iostream>class A{ public: virtual void A_f(){}};class B{ public: virtual void B_f(){}};class C:public A,public B{ public: void A_f(){}};int main(){ A *a; B *b; C *c=new C(); a=c,b=c; std::cout<<" a is "<<a<<" b is "<<b<<" c is "<<c<<std::endl;}
ubuntu上的试验结果
a is 0x1f5b010 b is 0x1f5b018 c is 0x1f5b010
看完了前面提到的资料其实蛮好理解的,实例C的虚函数表有两个表项,第一个指向基类A和C的虚函数,第二个指向基类B的虚函数,所以在指针赋值的时候,a和c都指向相同的虚函数表表项,而对b进行修正,指到了第二个表项(正好内存地址高1个字)。
0 0
- C++多态实现中的指针修正
- 【c++】指针和引用实现多态
- java通过interface实现C中的函数指针
- C指针实现找出一个数组中的最大值和次大值
- C 语言实现多态的原理:函数指针
- C语言中的指针
- c中的指针
- c语言中的指针
- C/C++中的指针
- c 中的far 指针
- c中的野指针
- c中的函数指针
- c&c++中的指针
- C/C++中的指针
- C中的指针(2)
- C语言中的指针
- C语言中的指针
- C中的函数指针
- android应用程序第9课:RadioButton
- php5.4.45的php.ini文件
- JAVA数据类型
- JAVA JDK1.5-1.9新特性
- SPOJ-VLATTICE
- C++多态实现中的指针修正
- 怎样成为一个天才
- 车险到底怎么买最划算
- Tomcat学习总结(5)——Tomcat容器管理安全的几种验证方式
- 要有勇气遵从你的内心和直觉——乔布斯
- hdfs dfs -ls 命令
- Android中Matrix动画
- Tortoise CVS(cvsnt)因为行结束符转换导致含中文文件编码转换的问题
- Android surfaceview详解