1、this指针理解
首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。
形如: int x ,Stock my 等,变量x是int 型,my是Stock类型
同理 my里的this就是指向my的指针, 所以this的类型应该是Stock * ,而对其的解引用*this就是Stock类型的变量
2、this指针的用处
this作用域在类的内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐函参数传递给函数,也就是说,即使你没写this指针,编译的时候也会加上this,作为非静态成员函数的隐含形参,对各成员的访问均通过this进行访问。
如: date.SetMonth == SetMonth(&date,9)
在成员函数内部,我们可以直接使用调用该函数的对象的成员,而无需通过成员访问运算符来做到这一点,因为this所指的正是这个对象。任何对类成员的直接访问都被看成this的隐式使用。
3、this指针的使用:
一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。
这就说明了this指针变量记录的是当前对象的内存地址,即this指针指向当前的对象!
5、this指针是什么时候创建的?
this在成员函数的开始执行前构造的,在成员的执行结束后清除
this是通过函数参数的首参数来传递的。this指针是在调用之前生成的。
6、通俗理解:
一个学生可以有多本书一样,而这些书都是属于这个同学的;同理,如果有很多个同学在一起,那么为了确定他们的书不要拿混淆了,最好的办法我想应该就是每个同学都在自己的书上写上名字,这样肯定就不会拿错了。
同理,一个对象的多个成员就可看作是这个对象所拥有的书;而在很多个对象中间,我们为了证明某个成员是自己的成员,而不是其他对象的成员,我们同样需要给这些成员取上名字。在C++中,我们利用this指针帮助对象做到这一点,this指针记录每个对象的内存地址,然后通过运算符->访问该对象的成员。
7、实例理解
class stu_info_mange
{
int sno;
int age;
string sname;
int grade;
}
...........
void print()
{
cout << "the name is " << this -> sname << endl; //显示this指针箭头操作符访问
cout << "the age is " << (*this).age << endl ; //显示this指针通过圆点操作符
cout <<"the grade is " << grade << endl; //隐式使用this指针
我自己的理解:
this -> sname 即this是指向stu_info_mange对象的,
所有 this ->sname == stu_info_mange.sname
附:琢磨了一上午,总结了this指针的知识点及自己的理解,若有错误,希望指正