多继承

来源:互联网 发布: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
原创粉丝点击