关于虚函数类指针和指向数据成员的指针哪位高手能解释的更加详细点
关于虚函数类指针和指向数据成员的指针谁能解释的更加详细点?
1,指向数据成员的指针这个该怎么理解
原帖在http://topic.****.net/u/20120802/13/8a1e156f-73cc-4518-bb93-e3791afad640.html?393106392
为了区分p1和p2,每一个真正的member offset值都被加上1。这个该怎么理解?
2,vc6.0中 为什么虚函数表指针是在类的最前面呢?而不是在类的最后面呢
原帖地址http://topic.****.net/u/20120802/12/65d24f1e-504f-4496-a0af-33696f7028d2.html?seed=979309652&r=79297909#r_79297909
请大神们给些更加详细的问题,谢谢
------解决方案--------------------
1.首先理解 指向数据成员的指针所得到的结果是该数据成员在一个内存布局的偏移量。那么对于
float Point3d::*p1 =0;
float Point3d::*p2 = &Point3d::x;
这两个式子来说不加1那么就没任何区别了(假设偏移量不考虑vptr的影响)。
2.为什么放前面,主要是考虑到继承后子对象的一个完整性以及处理上的方便性。如果放后面那么当继承的派生类增加数据成员。那么在使用基类指针指向派生类对象的处理上就很麻烦。
1,指向数据成员的指针这个该怎么理解
原帖在http://topic.****.net/u/20120802/13/8a1e156f-73cc-4518-bb93-e3791afad640.html?393106392
- C/C++ code
class Point3d{ public: virtual ~Point3d(); //… protected: static Point3d origin; float x,y,z; } float Point3d::*p1 =0; float Point3d::*p2 = &Point3d::x; //Point3d::* 的意思是“指向Point3d data member”的指针类型 if( p1 == p2 ){ cout <<” p1 & p2 contain the same value.”; cout <<”they must address the same member!”<<endl; }
为了区分p1和p2,每一个真正的member offset值都被加上1。这个该怎么理解?
2,vc6.0中 为什么虚函数表指针是在类的最前面呢?而不是在类的最后面呢
原帖地址http://topic.****.net/u/20120802/12/65d24f1e-504f-4496-a0af-33696f7028d2.html?seed=979309652&r=79297909#r_79297909
请大神们给些更加详细的问题,谢谢
------解决方案--------------------
1.首先理解 指向数据成员的指针所得到的结果是该数据成员在一个内存布局的偏移量。那么对于
float Point3d::*p1 =0;
float Point3d::*p2 = &Point3d::x;
这两个式子来说不加1那么就没任何区别了(假设偏移量不考虑vptr的影响)。
2.为什么放前面,主要是考虑到继承后子对象的一个完整性以及处理上的方便性。如果放后面那么当继承的派生类增加数据成员。那么在使用基类指针指向派生类对象的处理上就很麻烦。