多重継承における C++ のオブジェクト レイアウトを理解しようとしています。この目的のために、2 つのスーパークラス A、B、および 1 つのサブクラス C を用意しました。A のフィールド | vfptr | B のフィールド | Cのフィールド。
このモデルを取得しましたが、理解できないゼロがいくつかあります。これが私が試しているコードです
#include <iostream>
using namespace std;
class A{
public:
int a;
A(){ a = 5; }
virtual void foo(){ }
};
class B{
public:
int b;
B(){ b = 10; }
virtual void foo2(){ }
};
class C : public A, public B{
public:
int c;
C(){ c = 15; a = 20;}
virtual void foo2(){ cout << "Heeello!\n";}
};
int main()
{
C c;
int *ptr;
ptr = (int *)&c;
cout << *ptr << endl;
ptr++;
cout << *ptr << endl;
ptr++;
cout << *ptr << endl;
ptr++;
cout << *ptr << endl;
ptr++;
cout << *ptr << endl;
ptr++;
cout << *ptr << endl;
ptr++;
cout << *ptr << endl;
ptr++;
cout << *ptr << endl;
ptr++;
cout << *ptr << endl;
return 0;
}
そして、ここに私が得る出力があります:
4198384 //vfptr
0
20 // value of a
0
4198416 //vfptr
0
10 // value of b
15 // value of c
間のゼロの意味は何ですか? 前もって感謝します!