多继承
来源:互联网 发布:nba2k16郭艾伦捏脸数据 编辑:程序博客网 时间:2024/04/29 15:51
/**/
// 1.多继承 ,无虚函数#include <iostream>using namespace std;class Base{public:Base():m_data1(0x01){ }void FunTest1() { }private:int m_data1;};class Base1{public:Base1():m_data2(0x02){ }void FunTest2() { }private:int m_data2;};class Der : public Base, public Base1{public:Der():m_data3(0x03){ }void FunTest3() { }void FunTest4() { }private:int m_data3;};int main(){Der d;cout << "d size :"<<sizeof(d) << endl;return 0;}
运行结果:
内存情况:
<strong>得出 多继承 ,无虚函数 的 模型</strong>
// 2.多继承 ,有虚函数但不覆盖#include <iostream>using namespace std;class Base{public:Base():m_data1(0x01){ }virtual void FunTest1() {cout << "Base::FunTest1() " << endl;}private:int m_data1;};class Base1{public:Base1():m_data2(0x02){ }virtual void FunTest2() {cout << "Base1::FunTest2() " << endl;}private:int m_data2;};class Der : public Base, public Base1{public:Der():m_data3(0x03){ }virtual void FunTest3() {cout << "Der::FunTest3() " << endl;}virtual void FunTest4(){cout << "Der::FunTest4() " << endl;}private:int m_data3;};typedef void(*vftab)();void Test(){Der d;cout << "Der size:" << sizeof(d) << endl;cout << "-------Base---- " << endl;int *vfpt = (int *)(*(int *)&d);vftab vft = (vftab)(*(int *)vfpt);while (vft != 0){vft();vfpt++;vft = (vftab)(*vfpt);}cout << endl;cout << "-------Base1---- " << endl;vfpt = (int *)(* ((int *)&d + 2));vft = (vftab)(*(int *)vfpt);while (vft != 0){vft();vfpt++;vft = (vftab)(*vfpt);}cout << endl;}int main(){Test();return 0;}
运行结果:
内存情况:
<strong>.多继承 ,有虚函数但不覆盖的模型</strong>注意:继承列表中的顺序
// 3.多继承 ,有虚函数有覆盖#include <iostream>using namespace std;class Base{public:Base():m_data1(0x01){ }virtual void FunTest1(){cout << "Base::FunTest1() " << endl;}private:int m_data1;};class Base1{public:Base1():m_data2(0x02){ }virtual void FunTest2(){cout << "Base1::FunTest2() " << endl;}private:int m_data2;};class Der : public Base, public Base1{public:Der():m_data3(0x03){ }virtual void FunTest1(){cout << "Der::FunTest1() " << endl;}virtual void FunTest2(){cout << "Der::FunTest2() " << endl;}virtual void FunTest3(){cout << "Der::FunTest3() " << endl;}virtual void FunTest4(){cout << "Der::FunTest4() " << endl;}private:int m_data3;};typedef void(*vftab)();void Test(){Der d;cout << "Der size:" << sizeof(d) << endl;cout << "-------Base---- " << endl;int *vfpt = (int *)(*(int *)&d);vftab vft = (vftab)(*(int *)vfpt);while (vft != 0){vft();vfpt++;vft = (vftab)(*vfpt);}cout << endl;cout << "-------Base1---- " << endl;vfpt = (int *)(*((int *)&d + 2));vft = (vftab)(*(int *)vfpt);while (vft != 0){vft();vfpt++;vft = (vftab)(*vfpt);}cout << endl;}int main(){Test();return 0;}
运行结果:
内存情况:
多继承 ,有虚函数有覆盖的模型
注意:继承列表中的顺序
1 0
- 多继承 虚继承
- 多继承 菱形继承
- 继承 和 多继承
- 继承(单继承、多继承、菱形继承、虚继承)
- 继承、父子类、单继承、多继承
- 继承、多继承、菱形虚拟继承
- 多继承
- 多继承
- 多继承
- 多继承
- 多继承
- 多继承
- 多继承
- 多继承
- 多继承
- 多继承
- 多继承
- 多继承
- Kafka(一)初步介绍
- 台大林轩田《机器学习基石》学习笔记:重要工具二(Regularization)
- 网上书城项目(重构篇)(一)
- 【搞机】Apple Pencil 开箱
- Mybatis最入门---日志配置
- 多继承
- 批处理整理(组合包)
- androidStudio ndk Cannot find 'jni.h'
- 使MFC对话框具有xp/win7风格美化
- Android的6大布局
- DropDownMenu下拉菜单
- 原码,补码,和反码
- GCD
- iOS - UISearchController搜索框与NSPredicate谓词