64,282
社区成员
发帖
与我相关
我的任务
分享
class A
{
public:
A(){}
int x;
};
class B : virtual public A
{
public:
B(){}
};
class D : virtual public A
{
public:
D(){}
};
class C : public D ,public B
{
public:
C(){}
};
class C size(12):
+---
| +--- (base class D)
0 | | {vbptr}
| +---
| +--- (base class B)
4 | | {vbptr}
| +---
+---
+--- (virtual base A)
8 | x
+---
C::$vbtable@D@:
0 | 0
1 | 8 (Cd(D+0)A)
C::$vbtable@B@:
0 | 0
1 | 4 (Cd(B+0)A)
class A
{
public:
A(){}
int x;
};
class B : public A
{
public:
B(){}
};
class D : public A
{
public:
D(){}
};
class C :virtual public D ,virtual public B
{
public:
C(){}
};
class C size(12):
+---
0 | {vbptr}
+---
+--- (virtual base D)
| +--- (base class A)
4 | | x
| +---
+---
+--- (virtual base B)
| +--- (base class A)
8 | | x
| +---
+---
C::$vbtable@:
0 | 0
1 | 4 (Cd(C+0)D)
2 | 8 (Cd(C+0)B)
class C size(16):
+---
0 | {vbptr}
+---
+--- (virtual base D)
| +--- (base class A)
8 | | x
| +---
+---
+--- (virtual base B)
| +--- (base class A)
12 | | x
| +---
+---
[/quote]
嗯,有所领悟了,当有虚拟继承的时候会有一个指针,不论virtual public base class 的个数是多少,我以为每一个virtual public base class 都会指派一个指针!看来还是我理解有误!
class C size(16):
+---
0 | {vbptr}
+---
+--- (virtual base D)
| +--- (base class A)
8 | | x
| +---
+---
+--- (virtual base B)
| +--- (base class A)
12 | | x
| +---
+---