C++对象模型 多重继承与虚函数表
2013-09-04 20:36
459 查看
一 多重继承
1) 代码:
Code
void TestDynamicCast()
{
B1 *pB1 = new D();
cout << "B1:" << pB1 << endl;
D *pD = dynamic_cast<D*>(pB1);
cout << "D:"<< pD << endl;
B2 *pB2 = dynamic_cast<B2*>(pB1);
cout << "B2:" << pB2 << endl;
B3 *pB3 = dynamic_cast<B3*>(pB1);
cout << "B3:" << pB3 << endl;
delete pD;
}
2)验证代码的运行结果:
![](http://pic002.cnblogs.com/img/itech/200902/2009022810164625.png)
3)总结:
从多重继承的内存布局,我们可以看到子类新加入的虚函数被加到了第一个基类的虚函数表,所以当dynamic_cast的时候,子类和第一个基类的地址相同,不需要移动指针,但是当dynamic_cast到其他的父类的时候,需要做相应的指针的移动。
三 完!
感谢,Thanks!
作者:iTech
出处:http://itech.cnblogs.com/
转载:本文版权归作者iTech所有,转载请注明出处,不得用于商业用途!
C++对象模型系列:
本系列是主要是作者经验的总结且同时参考了大量的网络文章,希望能够给C++的学习者有所帮助,但是由于作者水平有限,难免有错,希望大家能够指出,我将虚心地向大家学习,与大家共同进步!本系列的开发环境是Windows 32+VS2008。
文章:
指针和引用
指针与数组
指针与字符串
堆栈与函数调用
sizeof与对象内存布局
单继承与虚函数表
多重继承与虚函数表
虚继承与虚函数表
类型转化
1) 代码:
Code
void TestDynamicCast()
{
B1 *pB1 = new D();
cout << "B1:" << pB1 << endl;
D *pD = dynamic_cast<D*>(pB1);
cout << "D:"<< pD << endl;
B2 *pB2 = dynamic_cast<B2*>(pB1);
cout << "B2:" << pB2 << endl;
B3 *pB3 = dynamic_cast<B3*>(pB1);
cout << "B3:" << pB3 << endl;
delete pD;
}
2)验证代码的运行结果:
![](http://pic002.cnblogs.com/img/itech/200902/2009022810164625.png)
3)总结:
从多重继承的内存布局,我们可以看到子类新加入的虚函数被加到了第一个基类的虚函数表,所以当dynamic_cast的时候,子类和第一个基类的地址相同,不需要移动指针,但是当dynamic_cast到其他的父类的时候,需要做相应的指针的移动。
三 完!
感谢,Thanks!
作者:iTech
出处:http://itech.cnblogs.com/
转载:本文版权归作者iTech所有,转载请注明出处,不得用于商业用途!
C++对象模型系列:
本系列是主要是作者经验的总结且同时参考了大量的网络文章,希望能够给C++的学习者有所帮助,但是由于作者水平有限,难免有错,希望大家能够指出,我将虚心地向大家学习,与大家共同进步!本系列的开发环境是Windows 32+VS2008。
文章:
指针和引用
指针与数组
指针与字符串
堆栈与函数调用
sizeof与对象内存布局
单继承与虚函数表
多重继承与虚函数表
虚继承与虚函数表
类型转化
相关文章推荐
- C++对象内存模型(高级)—多重继承与虚函数表(转)
- C++对象模型 多重继承与虚函数表
- [C++对象模型][8]多重继承与虚函数表
- [C++对象模型][8]多重继承与虚函数表
- [C++对象模型][8]多重继承与虚函数表
- C++对象模型 多重继承与虚函数表
- [C++对象模型][7]单继承与虚函数表
- [C++对象模型][9]虚继承与虚函数表
- C++对象模型 多重继承与虚函数表
- [C++对象模型][7]单继承与虚函数表
- 探索C++对象模型之 多重继承与虚函数表
- [C++对象模型][8]多重继承与虚函数表
- [C++对象模型][9]虚继承与虚函数表
- [C++对象模型][9]虚继承与虚函数表
- C++多重继承和虚拟继承对象模型、效率分析
- C++对象模型Data语意学分析、虚继承底层实现机制
- C++ - 多重继承和虚拟继承对象模型、效率分析
- C++对象内存模型2 (虚函数,虚指针,虚函数表)
- 三十二、C++内存布局,对象大小计算、虚函数虚继承对类内存模型的影响
- c++继承详解之一——继承的三种方式、派生类的对象模型