浅析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    作者:李德才转    责编:豆豆技术应用

正在加载评论...