C++ this指针 学习笔记

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指针的知识点及自己的理解,若有错误,希望指正

猜你喜欢

转载自blog.csdn.net/naturly/article/details/81428947