浅析C++中的this指针
http://tech.ddvip.com 2008年09月06日 社区交流
本文详细介绍浅析C++中的this指针
有下面的一个简单的类:
classCNullPointCall
{
public:
staticvoidTest1();
voidTest2();
voidTest3(intiTest);
voidTest4();
private:
staticintm_iStatic;
intm_iTest;
};
intCNullPointCall::m_iStatic=0;
voidCNullPointCall::Test1()
{
cout<<m_iStatic<<endl;
}
voidCNullPointCall::Test2()
{
cout<<"VeryCool!"<<endl;
}
voidCNullPointCall::Test3(intiTest)
{
cout<<iTest<<endl;
}
voidCNullPointCall::Test4()
{
cout<<m_iTest<<endl;
}
那么下面的代码都正确吗?都会输出什么?
CNullPointCall*pNull=NULL;//没错,就是给指针赋值为空
pNull->Test1(); //call1
pNull->Test2();//call2
pNull->Test3(13);//call3
pNull->Test4();//call4
你肯定会很奇怪我为什么这么问。一个值为NULL的指针怎么可以用来调用类的成员函数呢?!可是实事却很让人吃惊:除了call 4那行代码以外,其余3个类成员函数的调用都是成功的,都能正确的输出结果,而且包含这3行代码的程序能非常好的运行。
经过细心的比较就可以发现,call 4那行代码跟其他3行代码的本质区别:类CNullPointCall的成员函数中用到了this指针。
对于类成员函数而言,并不是一个对象对应一个单独的成员函数体,而是此类的所有对象共用这个成员函数体。 当程序被编译之后,此成员函数地址即已确定。而成员函数之所以能把属于此类的各个对象的数据区别开, 就是靠这个this指针。函数体内所有对类数据成员的访问, 都会被转化为this->数据成员的方式。
来源:blog.csdn 作者:李德才转 责编:豆豆技术应用