c++对象模型之Data布局(二)

2015-07-20 17:06:29 · 作者: · 浏览: 9
vptr设定初值,让它指向class所对应的virtual

table。

④加强destructor,使它能够抹消“指向class之相关virtualtable”的vptr。记

住destructor的调用次序是反向的:从derivedclass到base class。

所有的编译器不是吧vptr放在对象的头部,就是放在对象的尾部。

五指向Data Members的指针

/*

Pointer to Data Members

*/

#include

usingnamespace std;

?

classPoint3d

{

virtual ~Point3d();

?

public:

static Point3d origin;

float x, y, z;

};

intmain()

{

//类型为floatPoint3d::*而并不是float*

printf(&Point3d::x =%p , &Point3d::x);

printf(&Point3d::y =%p , &Point3d::y);

printf(&Point3d::z =%p , &Point3d::z);

}

?

#include

usingnamespace std;

structPoint

{

int x, y;

double d1, d2;

}

intAdd(Point arr[], int size, int Point::*p)

{

int sum = 0;

for(int i = 0; i < size; i ++)

sum += arr[i].*p;

return sum;

}

?

doubleAdd1(Point arr[], int size, double Point::*p)

{

int sum = 0;

for(int i = 0; i < size; i ++)

sum += arr[i].*p;

return sum;

};

?

intmain()

{

Point pp[3] = { {1,2,1.0,2.0},{3,4,1.0,2.0}, {5,6,1.0,2.0} };

cout<

cout<

}

?