C++有个this指针的概念,this指针是一个指向当前对象的指针,或者说当前对象的地址。this指针只能在一个类的非静态成员函数中使用。
C++的非静态成员函数的第一个默认并且被隐藏的参数是T *const register this,比如我们在Student这个类里声明这样一个函数:
int SetName(const char *name);
其实编译器处理的时候会变为 int SetName(Student *const register this, const char *name);
下面举两个例子:
1、this指针在回调函数中的使用
程序的运行结果是
Traveler : 同志,方山怎么走?
Police : 此处向西500米。
一个警察类,具有一个帮助行人解答问题的数据成员,和一个能够帮助行人的功能和一个能够对行人提出的问题进行解答的功能。
一个行人类,具有一个能够提出问题的数据成员,和一个能够向警察提出问题的功能。
这个小程序实现了两个对象之间的互相访问,通过this 的回调使用。如第33行的代码,让行人对警察提问。
2、this指针在成员函数级联调用的使用
这个程序的运行结果是 14 11。主要是inc和dec函数在进行自增和自减之后返回了this的引用,即对当前对象的引用,所以就可以一直调用本身的成员函数,并且使用同一个源头,所以能够实现累加,如果不是引用的话,由于每次调用之后this都被释放掉,所以最后的结果是11 10;相当于只有一次有效。
注:以上两个例题引用于突破C++一书。
另外由于非静态成员函数都是默认隐藏this指针的,所以当定义一个对象指针并且赋值为NULL时,依然可以调用成员函数,比如下面的例子:
我把stu赋值为NULL,但是前面三个test都是正常运行的,第四个test导致程序崩溃。原因是test1,test3,test4都是非静态成员函数,所以有默认参数this指针,但是只有test4使用了this指针,然而stu是NULL,所以程序崩溃了,那么观察test2就知道它是一个静态成员函数,不给其提供this指针,并且只能访问类的静态成员。所以test崩溃了,其他的都能正常运行。