首页 > 代码库 > 派生表中第一个基类没有虚函数,派生类存在虚函数时的内存布局

派生表中第一个基类没有虚函数,派生类存在虚函数时的内存布局

单继承的例子:

#include <iostream>using namespace std;class A{public:    A()    {        a = 1;        ch = a; //ASCII码97    }private:    int a;    char ch;};class C : public A{public:    C()    {        c = 3;    }    virtual void print()    {        cout << "C" << endl;    }private:    int c;};int main(){    C c;    int *p = (int *)&c;    for (int i = 0; i < 4; i++)    {        cout << p[i] << endl;    }    //C的内存布局:    //vptr    //a    //ch后面填充了3个字节    //c    return 0;}

实验结果:

技术分享

结论:单继承情况下基类没有虚函数,派生类存在虚函数时,派生类的vptr会被放在最前面,接着是基类数据成员,然后是派生类数据成员。

 

多重继承的例子:

派生表中第一个基类没有虚函数,派生类存在虚函数时的内存布局