Fork me on GitHub

this指针的用法和基本分析

当在不同的对象中采用this指针,就已经是在给它赋值了。对象各自的this指针指向各自对象的首地址,所以不同对象的this指针一定指向不同的内存地址。

this 指针是由系统自动提供的指向对象的特殊指针。

this指针的含义及其用法: 

1. this指针是一个隐含于每一个成员函数中的特殊指针。它指向正在被该成员函数操作的那个对象。

2. 当对一个对象调用成员函数时,编译程序先将该对象的地址付给系统创建的this指针,然后调用成员函数。每次成员函数存取数据成员时,都隐含使用this指针。同样也可以的使用*this来标识调用该成员函数的对象。

3. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。 

4. 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值;

   在X类的const成员函数中,this指针的类型为:const X* const, 这说明this指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作); 

5. 由于this并不是一个常规变量,所以,不能取得this的地址。

6. 在以下场景中,经常需要显式引用this指针
   (1) 为实现对象的链式引用(如例1); 
   (2) 为避免对同一对象进行赋值操作(如例2);
   (3) 在实现一些数据结构时,如list. 
7. 举例:
下面通过一个例子来说明:

#include<iostream>
using namespace std;
class A
{
public:
    A()
    {
        a=b=0;
    }
    A(int i,int j)
    {
        a=i;
        b=j;
    }
    void copy(A &aa);
    void print();
private:
    int a,b;
};
void A::copy(A &aa)
{
    if(this==&aa) return ;//如果this指针指向的是当前对象的地址,则直接跳出函数,反之将对象的值付给指针所指向的地址。
    *this=aa;//对于指针this进行赋值,* + 指针,表示地址。
}
void A::print()
{
    cout<<a<<" "<<","<<b<<endl;
}
int main()
{
    A a1,a2(3,4);
    a1.copy(a2);
    a2.print();
    a1.print();
    return 0;
}

程序执行结果是:

3  ,    4
说明: 在该程序中,类A的成员函数copy()内,出现了两次this指针。其中,*this是操作该成员函数的对象的地址,从main()中可以看出操作该成员函数的对象是a1。*this是操作函数的对象,而下边语句:
*this=aa;
表示将形参aa获得的某个对象的值赋值给该成员函数的对象。在上述例子中,操作该成员函数的对象也是a1。

原文链接:https://blog.csdn.net/qq_44863179/article/details/100677447
     https://blog.csdn.net/cherish_2012/article/details/21181695

posted @ 2020-04-24 12:53  威威超酷  阅读(1830)  评论(0编辑  收藏  举报