C++中this指针的理解和用法

C++中this指针的理解和用法关于this指针的一个精典回答:当你进入一个房子后,你可以看见桌子、椅子、地板等,但是房子你是看不到全貌了。对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向你这个实例本身。 个人理解:(ps:class类就好比这座房子,this就好比一把钥匙,通过钥匙来打开了这座房子的门,那么里面的东西就随意你取用了)

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

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

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

个人理解:

(ps:class类就好比这座房子,this就好比一把钥匙,通过钥匙来打开了这座房子的门,那么里面的东西就随意你取用了)

      this是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址,通过该地址可以访问内部的成员函数和成员变量。

    为什么需要this?因为this作用域是在类的内部,自己声明一个类的时候,还不知道实例化对象的名字,所以用this来使用对象变量的自身。在非静态成员函数中,编译器在编译的时候加上this作为隐含形参,通过this来访问各个成员(即使你没有写上this指针)。例如a.fun(1)<==等价于==>fun(&a,1)  

    this的使用:1)在类的非静态成员函数中返回对象的本身时候,直接用return *this(常用于操作符重载和赋值、拷贝等函数)。2)传入函数的形参与成员变量名相同时,例如:this->n = n (不能写成n=n)


程序举例(转)

class Point
{ 
    int x, y;
public:
    Point(int a, int b) { x=a; y=b;}
    Void MovePoint( int a, int b){ x+=a; y+=b;}
    Void print(){ cout<<"x="< };
void main( )
{
     Point point1( 10,10);
     point1.MovePoint(2,2);
     point1.print( );
}

a.对象point1调用MovePoint(2,2)的时候,即将point1对象的地址传递给了this指针

b.编译器编译后的原型应该是void MovePoint(Point *this, int a, int b)

c.在函数体中可以写成{this->x += a; this->y += b;}

d.也等价为point1.x += a;point1.y += b。(指针变量通过->访问成员变量(函数),对象通过.)

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

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

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


相关推荐

  • 类似于谷歌的搜索引擎_类似谷歌的搜索引擎

    类似于谷歌的搜索引擎_类似谷歌的搜索引擎推荐几款优秀的、甚至可以代替谷歌的搜索引擎。本文将要推荐的搜索引擎分为4类,分别是国内可使用、国内不可使用、视频搜索、特殊。每个搜索引擎都将展示网址、介绍、效果图。

    2022年9月10日
  • python编写简单网页_python制作动态数据图

    python编写简单网页_python制作动态数据图Django项目是一个定制的框架,可以和Python一起相结合制作网页。Django框架是用于创建模型的对象关系映射,也是为最终用户设计完美的管理界面。学习python语言的朋友可能尝试过用Django做一个网站,有的朋友可能会用bootstrap的CSS库来做,事实上做的还挺好看的。本文给大家介绍的是一个简单的网页制作,利用pythonDjango来做的,下面我们一起来看看吧。1、创建一个d…

    2022年10月13日
  • 项“XXXXX.sln”已在选择的位置受源代码管理

    项“XXXXX.sln”已在选择的位置受源代码管理

    2021年9月9日
  • BeanUtils.populate方法使用

    BeanUtils.populate方法使用BeanUtils.populate方法使用1.在执行BeanUtils.populate之后,会把map封装成User对象。要注意的是,UserBean类中的字段名必须和html中的name属性值相同,不然在BeanUtils.populate执行之后,User对象的字段中会出现NULL数据Map<String,String[]>map=req.getParameterMap();//创建User对象UserloginUser=newUser

    2022年7月26日
  • MQTT服务器搭建与试用,桌面工具连接MQTT服务器

    MQTT服务器搭建与试用,桌面工具连接MQTT服务器简介MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽、不可靠的网络的进行远程传感器和控制设备通讯等,正在日益成为物联网通信协议的重要组成部分。MQTT现在主要用于即时通讯,物联网M2M,物联网采集等。本文就社区上常见的开源MQTT服务器在常见操作系统上的搭建做详细介绍。目前一些开源MQTT服…

    2022年5月29日
  • MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)[通俗易懂]

    MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)[通俗易懂]目录MQTT(一)C#使用MQTTnet快速实现MQTT通信(文末有完整Demo下载)MQTT(二)在windows64位上安装Python环境MQTT(三)Python客户端+net客户端+net服务端简单通信MQTT(四)树莓派开机自动运行Python客户端MQTT(五)EMQ开源MQTT消息服务器1什么是MQTT?MQTT(MessageQue…

    2022年6月25日

发表回复

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

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