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)
上一篇 2022年5月16日 下午9:20
下一篇 2022年5月16日 下午9:20


相关推荐

  • Linux系统(Centos)安装tomcat和部署Web项目

    文章结构1.准备工作2.在Linux下安装Tomcat8.03.Linux中配置tomcat的服务器启动和关闭和配置tomcat的开机启动4.给tomcat配置用户名和密码登录5.使用IDEA打包Maven托管的WEB项目6.将JavaWeb项目发布到Tomcat8.0下面并且访问展示1,准备工作①,下载Linux版本的tomcat服务器,这里根据自己的需求下载相应的版本,作者这里…

    2022年4月6日
    42
  • hibernate query_下列关于hibernate说法正确的是

    hibernate query_下列关于hibernate说法正确的是转自品略图书馆:http://www.pinlue.com/article/2020/03/0920/1310003985022.html以前写代码,总免不了编写登陆部分。在获取user的时候,只可能返回一个user实例,或者为null。以前使用以下方法实现。Java代码publicUserget(Stringid){Sessionsession=HibernateU…

    2022年9月30日
    4
  • printwriter Java,java PrintWriter无法解析

    printwriter Java,java PrintWriter无法解析IhavenoideawhyIgetthemessage”cannotberesolved”onoutineclipseonthe11thlineimportjava.io.*;publicclassdriver{publicstaticvoidmain(String[]args){try{PrintWriterout=newPri…

    2022年8月10日
    11
  • 多目标进化算法详述-MOEA/D与NSGA2优劣比较

    多目标进化算法详述-MOEA/D与NSGA2优劣比较多目标进化算法系列1.多目标进化算法(MOEA)概述2.多目标优化-测试问题及其Pareto前沿3.多目标进化算法详述-MOEA/D与NSGA2优劣比较4.多目标进化算法-约束问题的处理方法NSGA-II由KalyanmoyDeb等人于2002年在文章”AFastandElitistMultiobjectiveGeneticAlgorithm:…

    2022年5月19日
    164
  • Xshell连接不上虚拟机的解决办法汇总

    Xshell连接不上虚拟机的解决办法汇总一 首先解决的关于 ping 的问题 1 在虚拟机中 ping 百度看能不能先 ping 通 如果虚拟机连接不上网络的话 Xshell 肯定是连接不上的 如果有上述情况的请点击二 检查你虚拟机中防火墙是否关闭 CentOs6 中查看防火墙状态 serviceiptab 关闭防火墙 serviceiptab 禁用防火墙 chkconfigipt 中查看防火墙状态 systemctlsta service 关闭防火墙

    2026年3月20日
    2
  • 库克:AI将成为苹果未来核心支柱

    库克:AI将成为苹果未来核心支柱

    2026年3月14日
    2

发表回复

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

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