Data语意学 class X{}; class Y : publicvirtual X {}; class Z : publicvirtual X {}; class A : publicY, public Z {}; sizeof(X) = 1,sizeof(Y) = 4, sizeof(Z) = 4, sizeof(A) = 8.visualc++6.0上測试结果(对emptyvirtual base class 有特殊处理的编译器) 反之则相应的结果为1.8.8,12 其实Y,Z的大小受…
class X{}; class Y :public virtual X{}; class Z :public virtual X{}; class A :public Y, public Z{}; void main() { cout << sizeof(X) << " " << sizeof(Y) << " " << sizeof(Z) << " " << s…
先引出问题,看一段代码: #include <iostream> using namespace std; class A { }; class B { public: B() {} ~B() {} }; class C { public: C() {} ~C() {} void foo() {} } class D {public: D() {} virtual void foo() {}}; class E : public D{public: virtual void foo() {}}…
单一继承中,base class 和derived class的对象都是从相同的地址开始,其间差异只在于derived class比较大,用以容纳自己的nonstatic members. 若vptr放在class object的起始处,如果base class没有虚函数而derived class有,那么单一继承的上述机制就被打破,把一个derived object转换为其base类型,就需要编译器的介入,用于调整地址. 虚拟继承 class ios1 { int a; }; class is…