当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

浅析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->数据成员的方式。
 

共4页 首页 上一页 1 2 3 4 下一页 尾页 跳转到
相关内容
赞助商链接