c 类对象的内存模型计算机等级考试

文章作者 100test 发表时间 2009:07:07 23:25:28
来源 100Test.Com百考试题网


  编辑特别推荐:

  全国计算机等级考试(等考)指定教材

  全国计算机等级考试学习视频

  全国计算机等级考试网上辅导招生

  全国计算机等级考试时间及科目预告

  百考试题教育全国计算机等级考试在线测试平台

  全国计算机等级考试资料下载

  全国计算机等级考试论坛

  C 类对象内存结构
  首先介绍一下C 中有继承关系的类对象内存的布局:在C 中,如果类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。之后是类中的成员变量的内存数据。
  对于子类,最开始的内存数据记录着父类对象的拷贝(包括父类虚函数表指针和成员变量)。 之后是子类自己的成员变量数据。
  对于子类的子类,也是同样的原理。但是无论继承了多少个子类,对象中始终只有一个虚函数表指针。  

  为了探讨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:
  }.



相关文章


关于apue中open函数计算机等级考试
计算机二级C 辅导:InternetOpenUrl函数计算机等级考试
C 空类的默认成员函数总结计算机等级考试
C static关键字使用时的一些技巧计算机等级考试
c 类对象的内存模型计算机等级考试
计算机二级C 辅导:C 回调函数用法计算机等级考试
C 常见的内存错误及其对策计算机等级考试
C _C内存耗尽怎么办计算机等级考试
C_C 函数调用与函数返回值计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛