先要理解class的意思。class应该理解为一种类型,象int,char同样,是用户自定义的类型。用这个类型能够来声明一个变量,好比int x, myclass my等等。这样就像变量x具备int类型同样,变量my具备myclass类型。理解了这个,就好解释this了,my里的this 就是指向my的指针。若是还有一个变量myclass mz,mz的this就是指向mz的指针。 这样就很容易理解this 的类型应该是myclass *,而对其的解引用*this就应该是一个myclass类型的变量。html
一般在class定义时要用到类型变量自身时,由于这时候还不知道变量名(为了通用也不可能固定实际的变量名),就用this这样的指针来使用变量自身。 ios
#include<iostream.h> class Point { int x, y; public: Point(int a, int b) { x=a; y=b;} Void MovePoint( int a, int b){ x+=a; y+=b;} Void print(){ cout<<"x="<<x<<"y="<<y<<endl;} }; void main( ) { Point point1( 10,10); point1.MovePoint(2,2); point1.print( ); }
=================this指针的由来====================函数
一个学生能够有多本书同样,而这些书都是属于这个同窗的;同理,若是有不少个同窗在一块儿,那么为了肯定他们的书不要拿混淆了,最好的办法我想应该就是每一个同窗都在本身的书上写上名字,这样确定就不会拿错了。post
同理,一个对象的多个成员就可看做是这个对象所拥有的书;而在不少个对象中间,咱们为了证实某个成员是本身的成员,而不是其余对象的成员,咱们一样须要给这些成员取上名字。在C++中,咱们利用this指针帮助对象作到这一点,this指针记录每一个对象的内存地址,而后经过运算符->访问该对象的成员。this
=================this指针做用示例====================url
二话不说!咱们经过一个程序来体现this指针的实际用处:spa
#include <iostream> using namespace std; class A { public: int get() const{return i;} void set(int x){this->i=x;cout<<"this指针保存的内存地址为:"<<this<<endl;} private: int i; }; int main() { A a; a.set(9); cout<<"对象a所在的内存地址为:"<<&a<<endl; cout<<"对象a所保存的值为:"<<a.get()<<endl; cout<<endl; A b; b.set(999); cout<<"对象b所在的内存地址为:"<<&b<<endl; cout<<"对象b所保存的值为:"<<b.get()<<endl; return 0; }
这个程序的输出以下:.net
经过这个输出结果,咱们能够看到,对象a的内存地址和this指针的如出一辙(都是0017F7E8);而当运行到对象b的时候,它的内存地址又和它所对应的this指针指向的内存地址如出一辙了(都是0017F7DC)。这就说明了this指针变量记录的是当前对象的内存地址,即this指针指向当前的对象!指针
在程序的第8行,咱们就用了this指针的这个属性,即:this->i=x;这句话就表示把x的值赋值给当前的对象的私有成员函数i。code
=================总结====================
经过上面这个例子,咱们能够看到this指针最大的做用就是它保存了当前对象的地址,而且应用指针的形式指向了当前的对象。这种好处咱们将会在另一篇博文中看到.......
转自:http://www.cnblogs.com/uniqueliu/archive/2011/09/24/2189545.html