编辑特别推荐:
全国计算机等级考试资料下载

为了探讨C++类对象的内存布局,先来写几个类和函数
首先写一个基类:
classBase
{
public:
virtual void f() { cout << "Base::f" <
virtual void g() { cout << "Base::g" << endl;}
virtual void h() { cout << "Base::h" << endl; }
intbase;
protected:
private:
};
然后,我们多种不同的继承情况来研究子类的内存对象结构。
1.无虚函数集继承
//子类1,无虚函数重载
class Child1 : publicBase
{
public:
virtual void f1() { cout << "Child1::f1" <
virtual void g1() { cout << "Child1::g1" << endl;}
virtual void h1() { cout << "Child1::h1" << endl; }
intchild1;
protected:
private:
};
这个子类Child1没有继承任何一个基类的虚函数,因此它的虚函数表如下图:
我们可以看出,子类的虚函数表中,先存放基类的虚函数,在存放子类自己的虚函数。
2.有一个虚函数继承
//子类2,有1个虚函数重载
class Child2 : publicBase
{
public:
virtual void f() { cout << "Child2::f" <
virtual void g2() { cout << "Child2::g2" << endl;}
virtual void h2() { cout << "Child2::h2" << endl; }
intchild2;
protected:
private:
};