考虑如下代码:
class Point3d {
private:
float x;
static List *freeList;
float y;
static const int chunkSize = 250;
float z;
};
Nonstatic data member在class object中排列顺序將和被声明的顺序一样,任何中间介入的static data member都不会放进对象布局之中;static data members存放在data segment中
考虑如下代码:
Point3d origin, *pt = *origin; origin.x = 0.0; pt->x = 0.0;static date Members
每一个static data member只有一个实体,存在在程序的data segment之中,每次程序调用static member,就会被内部转化为对该唯一的extern实体直接操作,例如:
// origin.chunkSize = 250; Point3d::chunkSize = 250; // pt->chunkSize = 250; Point3d::chunkSize = 250;
从指令执行观点来看,这是C++语言中"通过一个指针和通过一个对象来获取member",结论完全相同的唯一一种情况;
nonstatic data membersnonstatic data members直接存放在每一个class object之中,只要程序员在一个member function中直接处理一个nonstatic data member,所谓implicit class object就会发生
Point3d Point3d::transalte(const Point3d &pt) {
x += pt.x;
y += pt.y;
z += pt.z;
}
表面上看到对于x,y,z的直接存取,事实上是经由一个implicit class object(this指针)完成的
Point3d Point3d::transalte(Point3d *const int,const Point3d &pt) {
x += pt.x;
y += pt.y;
z += pt.z;
}



