c++对象内存布局(二)

2014-11-24 11:40:50 · 作者: · 浏览: 4
al(bv){};
virtual void base_f(){cout<<"base::f()"<
virtual void base_t(){cout<<"base::t()"<
private:
int bval;
};
class base1:virtual public base{
public:
base1(int bv, int bv1):base(bv), bval1(bv1){};
void base_f(){cout<<"base1::f()"<
virtual void base1_g(){cout<<"base1::g()"<
virtual void base1_k(){cout<<"base1::k()"<
private:
int bval1;
};
class base2: virtual public base{
public:
base2(int bv, int bv2):base(bv), bval2(bv2){};
void base_f(){cout<<"base2::f()"<
virtual void base2_g(){cout<<"base2::g()"<
virtual void base2_k(){cout<<"base2::k()"<
private:
int bval2;
};
class derived: public base1, public base2{
public:
derived(int bv, int bv1, int bv2, int dv):base(bv), base1(bv, bv1),base2(bv, bv2), dval(dv){};
void base_f(){cout<<"derived::f()"<
void base1_g(){cout<<"derived::base1_g()"<
void base2_g(){cout<<"derived::base2_g()"<
virtual void derived_h(){cout<<"derived::h()"<
private:
int dval;
复制代码
测试代码查看内存结构
复制代码
derived d(10, 100, 1000, 10000);
FUN fun = NULL;
int **pvtab = (int**)&d;
cout<<"[0]:base1->vptr "<
for(int i=0; i<5; i++){
fun = (FUN)pvtab[0][i];
cout<<" "<
fun();
}
cout<<" 5 "<
cout<<"[1]:bval1 "<<(int)pvtab[1]<
cout<<"[2]:base2->vptr "<
for(int i=0; i<3; i++){
fun = (FUN)pvtab[2][i];
cout<<" "<
fun();
}
cout<<" 3 "<
cout<<"[3]:bval2 "<<(int)pvtab[3]<
cout<<"[4]:dval "<<(int)pvtab[4]<
cout<<"[5]:base->vptr "<
for(int i=0; i<2; i++){
fun = (FUN)pvtab[5][i];
cout<<" "<
fun();
}
cout<<" 2 "<
复制代码
运行结果:
[0]:base1->vptr
0 derived::f()
1 derived::base1_g()
2 base1::k()
3 derived::base2_g()
4 derived::h()
5 134516512
[1]:bval1 100
[2]:base2->vptr
0 derived::f()
1 derived::base2_g()
2 base2::k()
3 0
[3]:bval2 1000
[4]:dval 10000
[5]:base->vptr
0 derived::f()
1 base::t()
2 134517004