一 多重继承

1) 代码:

 endl; }
};

 

 

2)类图:

[C++对象模型][8]多重继承与虚函数表

 

3)VS2008的编译选项查看布局:

[C++对象模型][8]多重继承与虚函数表

 

4)可视化表示:

[C++对象模型][8]多重继承与虚函数表

 

5)代码验证:

;
    PrintVTAndMember(pD);
    delete pD;
}

 

 

6) 验证代码运行结果:

[C++对象模型][8]多重继承与虚函数表

 

7)总结:

与单继承相同的是所有的虚函数都包含在虚函数表中,所不同的多重继承有多个虚函数表,当子类对父类的虚函数有重写时,子类的函数覆盖父类的函数在对应的虚函数位置,当子类有新的虚函数时,这些虚函数被加在第一个虚函数表的后面。

二 多重继承运行时类型转化

1)代码验证:

 endl;
    delete pD;
}

 

2)验证代码的运行结果:

[C++对象模型][8]多重继承与虚函数表

 

3)总结:

从多重继承的内存布局,我们可以看到子类新加入的虚函数被加到了第一个基类的虚函数表,所以当dynamic_cast的时候,子类和第一个基类的地址相同,不需要移动指针,但是当dynamic_cast到其他的父类的时候,需要做相应的指针的移动。

三 完!

相关文章: