• 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

  • 相关阅读:
    初涉「带权并查集」&&bzoj3376: [Usaco2004 Open]Cube Stacking 方块游戏
    【树形dp】7.14城市
    【树形背包】bzoj4033: [HAOI2015]树上染色
    【计数】51nod1677 treecnt
    【树链剖分 差分】bzoj3626: [LNOI2014]LCA
    【最短路径树】51nod1443 路径和树
    python--异常处理
    常用模块之hashlib,configparser,logging模块
    面向对象之反射及内置方法
    python之封装
  • 原文地址:https://www.cnblogs.com/wwct/p/12766747.html
Copyright © 2020-2023  润新知