您的位置:首页 > 编程语言 > C语言/C++

孙鑫VC++ 第三课 this指针的问题

2017-04-01 22:55 239 查看
最近看一个古老但经典的VC++视频,看到第三课的时候,遇到一个小小的比较特殊的问题,就是子类的对象调用父类时,在父类里的this指针指向的是子类的对象。逻辑上感到有点混乱,用一段代码加以验证。

#include <iostream.h>
class PARENT{
int d;
public:
PARENT()
{
d=1;
cout<<"PARENT this ="<<this<<endl;
cout<<"d="<<this->d<<endl;
}
};

class CHILD : public PARENT
{
int b;
public:
CHILD():PARENT()
{
b=2;
cout<<"CHILD this = "<<this<<endl;
cout<<"b="<<this->b<<endl;
}
};

int main(int argc, char* argv[])
{
CHILD cb;
cout<<"CHILD object cb's addr is="<<&cb<<endl;
return 0;
}




上面代码和孙鑫第三课中提到的this指针部分的MFC的代码原理一样!此代码运行的结果你会发现this的值都一样!而且this都是指向cb对象的!  因为this指针式在创建一个对象时,隐含的将对象的地址赋予一个指针,那就是this指针。在创建对象cb时,先讲cb的首地址赋给this,根据继承性,首先调用基类的构造函数,虽然此时cb对象还未完全创建(必须调用完子类的构造函数时,此时对象才会创建完毕),但是此时cb对象的基类部分已经构造完毕,所以这时候的this指针可以看成是cb的this指针,但是只能调用基类PARENT的数据成员。如果此时你在PARENT()里加上一句cout<<"b="<<this->b<<endl;让其调用子类的数据成员,则会报错!因为this指向的对象没有构造子类的部分!在执行完基类的构造函数进入子类的构造函数后,这时候this指向的对象构造完成,这时候this指针也就是一个真正的的指向cb的常指针了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: