zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Redis 为什么用跳表而不用平衡树
    常用的垂直细分引擎工具
    如何为Kafka集群选择合适的Partitions数量
    一图看懂深度学习框架对比----Caffe Torch Theano TensorFlow
    关于深度学习(deep learning)的常见疑问 --- 谷歌大脑科学家 Caffe缔造者 贾扬清
    神经网络CNN训练心得--调参经验
    数据归一化处理
    centos上tensorflow一键安装脚本
    深度学习---tensorflow简介
    kali linux之msf后渗透阶段
  • 原文地址:https://www.cnblogs.com/wwct/p/12766747.html
Copyright © 2011-2022 走看看