C++ this指针

C++ this指针this指针引言:首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。注意:this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针的类型取决于…

大家好,又见面了,我是你们的朋友全栈君。

this 指针

引言:
首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。
注意:
this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针的类型取决于使用this指针的成员函数类型以及对象类型,

一、this指针的概念

  1. 定义
    在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。

  2. this只能在成员函数中使用
    成员函数默认第一个参数为T* const register this。
    (友元函数,全局函数不是成员函数)

  3. this指针不能再静态函数中使用
    静态函数如同静态变量一样,他不属于具体的哪一个对象,静态函数表示了整个类范围意义上的信息,而this指针却实实在在的对应一个对象,所以this指针不能被静态函数使用。

  4. this指针的创建
    this指针在成员函数的开始执行前构造的,在成员的执行结束后清除。

  5. this指针只有在成员函数中才有定义。
    创建一个对象后,不能通过对象使用this指针。也无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。

二、this指针的操作

  1. 在类的非静态成员函数中返回类对象本身的时候,我们可以使用圆点运算符*,箭头运算符->。
    #include<iostream>
    using namespace std;
    class A{ 
         
     private:
      int x;
     public:
      A(){ 
         
       x=0;
      }
      void display(){ 
         
       cout<<this<<endl;
       cout<<this->x<<endl;
       cout<<x<<endl;
       cout<<(*this).x<<endl;
      }
    };
    int main(void){ 
         
        A a;
        a.display();
    }
    

    输出:

    0x70fe40
    0
    0
    0
    
    
  2. 实现级联

关于this指针的一个精典回答:

当你进入一个房子后,
你可以看见桌子、椅子、地板等,
但是房子你是看不到全貌了。
对于一个类的实例来说,
你可以看到它的成员函数、成员变量,
但是实例本身呢?
this是一个指针,
它时时刻刻指向你这个实例本身。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145221.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 群、环、域的概念总结[通俗易懂]

    群、环、域的概念总结[通俗易懂]很容易看懂群简而言之,群的概念可以理解为:一个集合以及定义在这个集合上的二元运算,满足群的四条公理,封闭性、结合性、单位元、反元素。具体理解为:封闭性:在集合上作任意二元运算,不会诞生新的运算,这个集合已经经过充分的完美拓扑。结合性:组合一个二元操作链,之间没有先后运算的区别,这种操作是平坦的(区别交换律)。单位元:具有单位的属性,单位元和任何一个元素操作等于那个元素本身。…

    2022年6月18日
  • BP神经网络基础算法

    BP神经网络基础算法

    2021年6月5日
  • 妙用AccessibilityService黑科技实现微信自动加好友拉人进群聊[通俗易懂]

    妙用AccessibilityService黑科技实现微信自动加好友拉人进群聊[通俗易懂]妙用AccessibilityService黑科技实现微信自动加好友拉人进群聊标签:2018引言:在上上周的周六和周日,我发了两篇利用itchat实现微信机器人的文章(Python):小猪的Python学习之旅——18.Python微信转发小宇宙早报小猪的Python学习之旅——19.Python微信自动好友验证,自动回复,发送群聊链接通过把脚本挂到服务器上…

    2022年6月4日
  • MySQL8.0 驱动jar包[通俗易懂]

    MySQL8.0 驱动jar包[通俗易懂]链接:https://pan.baidu.com/s/1gTKoAYoKVoo8pitZGLeAbQ提取码:clhp

    2022年5月21日
  • android-studio安装及android开发环境搭建[通俗易懂]

    android-studio安装及android开发环境搭建[通俗易懂]android-studio安装及android开发环境搭建版本信息版本作者时间备注v1.0ZY2019.2.9初稿目录文章目录android-studio安装及android开发环境搭建版本信息目录一、下载准备二、安装三、配置及测试1、首次配置2、测试3、创建虚拟机运行(1)正常运行(2)启动失败的问题及解决方案a、检测虚拟化b、AMD的CPU使用虚拟…

    2022年7月23日
  • 模仿新浪微博随便看看的软件_随便看看而已的微博

    模仿新浪微博随便看看的软件_随便看看而已的微博效果图目标:(1)掌握ListView控件的使用;(2)理解Adapter的作用并掌握自定义FruitAdapter的使用方式步骤:1.首先在插入代码,为的是实现效果代码如下:  2.新建一个xml文件添加代码,实现代码如下:3.java代码MainActivity.javaArticleAdapterMessage.java…

    2022年10月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号