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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringMVC执行流程和原理「建议收藏」

    SpringMVC执行流程和原理「建议收藏」SpringMVC流程:01、用户发送出请求到前端控制器DispatcherServlet。02、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。03、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。04、Dispatche…

    2022年6月28日
    25
  • 敏捷开发模式

    敏捷开发模式是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于"非敏捷"

    2021年12月27日
    51
  • 百度地图API显示多个标注点并添加百度样式检索窗口

    百度地图API显示多个标注点并添加百度样式检索窗口

    2021年10月10日
    47
  • Win10 桌面美化[通俗易懂]

    Win10 桌面美化[通俗易懂]Win10桌面美化最近发现了几款Win10界面美化的软件,看了看别人家的Win10操作界面,瞬间觉得自己的low了,关键是赏心悦目啊!废话不多说,先看看我原来桌面和美化后的桌面对比图原始桌面美化桌面1.安装RocketDockRocketDock可以提供类似macos的操作系统图标特效,打开安装包进行安装,完毕后启动得到效果如下:可以发现切换效果与mac类似,他默认的主题是C…

    2022年4月25日
    51
  • 建立排序二叉树并中序遍历

    建立排序二叉树并中序遍历分析:中序遍历也叫中根遍历,顾名思义是把根节点放在中间来遍历,其遍历顺序为左子节点–>根节点–>右子节点。方法一:#includeusingnamespacestd;structnode//二叉树结点结构{intdata;node*left;//右子树结点指针n

    2022年7月25日
    5
  • python中将字符串转化为数字_python字符串转int

    python中将字符串转化为数字_python字符串转intpython把字符串转化成数字的方法发布时间:2020-08-0317:03:31来源:亿速云阅读:82作者:清晨这篇文章将为大家详细讲解有关python把字符串转化成数字的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python中的int函数只能把整数字符串转换转换成整数另外可用于取出float的整数部分可以用float进行转换测试用例:>&gt…

    2025年6月7日
    4

发表回复

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

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