当前位置:首页 > 关于孙鑫v c++ 第三讲 继承中this指针问题
记得孙鑫VC++视频教程里有一段剖析MFC的代码,大意就是 CTESTAPP类是CWINAPP的子类,而CTESTAPP创建一个全局对象时,在CWINAPP的构造函数里面用了this指针,但是这里this指针指向的的是CTESTAPP的对象,而不是所在类的对象,也许读者这时候对这个this指针有点糊涂了! 不要怕!马上让你明明白白! 请看下面一段代码: #include
class PARENT{//基类 int d; public:
PARENT(){ d=1;
cout<<\ cout<<\ } };
class CHILD : public PARENT{//子类 int b; public:
CHILD():PARENT(){ b=2; cout<<\ cout<<\ } };
int main(int argc, char* argv[]) { CHILD cb;//CHILD对象 cout<<\ return 0; }
这段代码和上面提到的MFC的代码原理一样!此代码运行的结果你会发现this的值都一样!而且this都是指向cb对象的!
因为this指针式在创建一个对象时,隐含的将对象的地址赋予一个指针,那就是this指针。在创建对象cb时,先讲cb的首地址赋给this,根据继承性,首先调用基类的构造函数,虽然此时cb对象还未完全创建(必须调用完子类的构造函数时,此时对象才会创建完毕),但是此时cb对象的基类部分已经构造完毕,所以这时候的this指针可以看成是cb的this指针,但是只能调用基类PARENT的数据成员。如果此时你在PARENT()里加上一句cout<<\让其调用子类的数据成员,则会报错!因为this指向的对象没有构造子类的部分!在执行完基类的构造函数进入子类的构造函数后,这时候this指向的对象构造完成,这时候this指针也就是一个真正的的指向cb的常指针了。
这时候你也不难理解了MFC当中CWINAPP传递的this指针是指向子类CTESTAPP的对象,而不是所在类CWINAPP了!这里在基类中使用this的意思有点像,由于子类对象没构造好,但是指向对象的指针已近指向那个对象了,早晚对象都会构造好的,那不如先拿this指针代替子类对象用!
如需交流加QQ:447886938
共分享92篇相关文档