C++中this指针的作用以及用法详解

C++中this指针的作用以及用法详解为什么引用this指针?当我们在类中定义了一个变量,同时又在类成员函数中定义了同一个变量时,也就是变量名重复时,但是我们要想使用类中的定义的变量,此时就需要this指针了。1.this指针的作用指针存在于类的成员函数中,指向被调用函数类实例的地址。 一个对象的this指针并不是对象本身的一部分,不会影响sizeof()的结果。this指针的作用域是在类内部,当在类的非静态成员函

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

为什么引用this指针?

当我们在类中定义了一个变量,同时又在类成员函数中定义了同一个变量时,也就是变量名重复时,但是我们要想使用类中的定义的变量,此时就需要this指针了。

1.this指针的作用

指针存在于类的成员函数中,指向被调用函数类实例的地址。

 一个对象的this指针并不是对象本身的一部分,不会影响sizeof()的结果。

this指针的作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。换句话说就是,及时你没有用this指针,编译器在编译的时候也会自动加上this的,它是一个隐含形参,对各成员的访问均通过this进行。

2.this指针的使用

(1)在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;

(2)当参数与函数成员变量名相同时,应使用 this.age = age;

3.this指针的特点

 (1)this指针只能在成员函数中使用

          全局函数,静态函数都不能使用this指针,其实,成员函数的第一个默认参数是 *const  this

例:class Student()

{

int fun(int x)

{

}

};

函数fun(int x)的原型在编译器看来就是 fun(Student *const this ,int x)

 (2)this 指针在成员函数的开始前构造,在成员函数的结束后清除,生命周期和其他函数参数一样。当调用一个类的成员函数时,编译器将类的指针作为函数的this参数传递进去。

如:Student stu;

stu.fun(3);

此时编译器会编译成:

Student::fun(&x,3);

(3)this指针会因编译器不同而有不同的放置位置。可能是栈,也可能是寄存器,甚至全局变量。

在汇编级 别里面,一个值只会以3种形式出现:立即数、寄存器值和内存变量值。不是存放在寄存器就是存放在内 存中,它们并不是和高级语言变量对应的


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

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

(0)
上一篇 2022年5月13日 上午9:20
下一篇 2022年5月13日 上午9:20


相关推荐

  • 微信小程序与php后端交互_微信小程序数据库放哪

    微信小程序与php后端交互_微信小程序数据库放哪这里简单介绍用php后台实现获取openid并保存到数据库;微信的登陆流程是这样的首先前端发送请求到服务器:wx.login({success:function(res){varcode=res.code;//发送给服务器的codewx.getUserInfo({success:function(res){varuserNick=res.userInfo.nickName;…

    2025年12月13日
    5
  • Centos 6.9_centos iptables

    Centos 6.9_centos iptables规则集类型hash:net#创建网络规则集(可以是是网段或者IP)hash:net,port#创建网络规则集,带端口,基础用法ipsetcreatefwhash:net#创建规则集ipsetaddfw10.0.0.0/24#给新加的规则添加IP段ipsetdelfw10.68.22.1/24#删除IPi…

    2022年10月6日
    4
  • springboot线程池的使用和扩展

    springboot线程池的使用和扩展我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,帮助我们更方便的将业务逻辑提交到线程池中异步执行,今天我们就来实战体验这个线程池服务;本文地址:http://blog.csdn.net/boling_cavalry/article/details/79120268实战环境windowns10;jdk1.8;spring

    2022年6月30日
    24
  • Windows 10 多出多个虚拟显示器的解决方法「建议收藏」

    Windows 10 多出多个虚拟显示器的解决方法「建议收藏」昨天更新Windows101809之后,系统中多出了4个“通用非即插即用监视器”,由于本人长期是笔记本外接显示器使用,出现这个问题后,鼠标会经常性的跑到另外的屏幕上去,甚至一些窗口会跑到其他页面上去。到NVIDIA控制面板查看之后发现多出的显示器是在核心显卡上,所以怀疑是核显的问题。其实之前也出现过类似问题,Google之后发现有人也有类似问题。尝试在任务管理器中卸载多出…

    2022年8月21日
    17
  • 谷歌 analytics.js 部分解密版

    谷歌 analytics.js 部分解密版源:http://www.google-analytics.com/analytics.js(function(){varaa=encodeURIComponent,f=window,ba=setTimeout,n=Math;functionPc(a,b){returna.href=b}functionfa(a,b){returna.name=b}varQc=”repla…

    2022年7月26日
    14

发表回复

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

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