虚函数与虚继承的思考

2014-11-20 06:25:54 · 作者: · 浏览: 39

  有这么一个关于虚函数和虚继承的问题,如下:


  class A


  {


  char k[3];


  public:


  virtual void aa();


  };


  class B: public virtual A


  {


  char j[3];


  public:


  virtual void bb();


  };


  class C: public virtual B


  {


  char i[3];


  public:


  virtual void cc();


  };


  请问sizeof(A), sizeof(B), sizeof(C)分别为多少?


  对于A, 我们很清楚的知道,其大小为8。


  对于B,考虑到虚继承和自身的虚函数,我们也可以算出来起大小为8+8+4 = 20对于C,其大小为20+8+4 = 32。


  其中 4为虚继承所占用的指针。


  这个看上去没有什么问题。但是当我把虚继承去掉以后,这里却有了一些变化?


  首先,我猜想了一下,A是8,B是16,C是24。