<b>c++类对象的内存模子</b>[VC/C++编程]
本文“<b>c++类对象的内存模子</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
C++类对象内存构造
首先介绍一下C++中有担当关系的类对象内存的筹划:在C++中,假如类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中.之后是类中的成员变量的内存数据.
关于子类,最开始的内存数据记录着父类对象的拷贝(包含父类虚函数表指针和成员变量).之后是子类自己的成员变量数据.
关于子类的子类,也是一样的原理.但是无论担当了多少个子类,对象中始终只有一个虚函数表指针.
为了探究C++类对象的内存筹划,先来写几个类和函数
首先写一个基类:
class Base
{
public:
virtual void f() { cout << "Base::f" << endl; }
virtual void g() { cout << "Base::g" << endl; }
virtual void h() { cout << "Base::h" << endl; }
int base;
protected:
private:
};
然后,我们多种差别的担当情形来研究子类的内存对象构造.
1. 无虚函数集担当
//子类1,无虚函数重载
class Child1 : public Base
{
public:
virtual void f1() { cout << "Child1::f1" << endl; }
virtual void g1() { cout << "Child1::g1" << endl; }
virtual void h1() { cout << "Child1::h1" << endl; }
int child1;
protected:
private:
};
这个子类Child1没有担当任何一个基类的虚函数,因此它的虚函数表以下图:
我们可以看出,子类的虚函数表中,先存放基类的虚函数,在存放子类自己的虚函数.
以上是“<b>c++类对象的内存模子</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |