C++:虚拟继承

nul*_*ull 5 c++ virtual-inheritance

请考虑以下代码:

#...
class A {};
class B: public A{};
class C: virtual public A{};
class D: virtual public C{};
// No More Classes
...
int _tmain(int argc, _TCHAR* argv[]) {
 cout<<sizeof(A)<<" ";
 cout<<sizeof(B)<<" ";
 cout<<sizeof(C)<<" ";
 cout<<sizeof(D)<<".";

 ...
}
Run Code Online (Sandbox Code Playgroud)

O/P:1 1 4 8.

题:

  1. sizeof(A)= 1byte,这个位置对于编译器/我们来说意义重大.
  2. 为什么编译器在实际上没有任何内容时,在C类对象中添加vptr.
  3. 如果我们没有任何虚函数,编译器会向派生对象添加额外的vptr.

*.这是我的第一个问题,如果你发现任何错误,请纠正我.

Ped*_*pam 8

简而言之,这不是因为类是虚拟的,而是因为标准要求所有对象都可以通过它们的内存地址来区分.看到这个问题:

为什么C++中空类的大小不为零?