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

最近看一个古老但经典的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的常指针了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值