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


相关推荐

  • android–手机桌面添加网址链接图标(解决方式)

    android–手机桌面添加网址链接图标(解决方式)

    2022年1月21日
    585
  • Lena图像分解成小块与从小块合成

    Lena图像分解成小块与从小块合成 ➤01背景在2020年人工神经网络课程第一次作业第八题中需要对Lena图像使用AutoEncode网络进行压缩。将Lena(灰度图像)拆解成不同尺寸的大小形成训练压缩样本过程;或者从训练结果重新组合成Lena灰度图像是实验的基础。▲Lena灰度图像下面给出相关操作的Python程序和相关的结果。主要操作包括:将512×512的Lena灰度图片(0~255)分割成边长8~16的图像块,并通过行扫描形行向量;对图像进行归一化,形成数据在-0.5~0.5之

    2022年6月19日
    26
  • qi接收启动协议_基于QI协议的无线充电通信系统「建议收藏」

    qi接收启动协议_基于QI协议的无线充电通信系统「建议收藏」龙源期刊网http://doc.docsou.com基于QI协议的无线充电通信系统作者:胡江浩张中炜来源:《中国新通信》2016年第03期【摘要】无线充电技术的学名又叫做无线电能传输,其原理非常类似于变压器,都是通过发射电路产生一个交变电流通过初级线圈,从而在初级线圈上感应出一个交变电磁场,次级线圈通过接收该交变电磁场从而产生感应电流,通过电磁感应实现能源的传输。该文主要介绍了一种无线充电领域中…

    2022年6月16日
    34
  • birt报表开发

    birt报表开发开源报表 BIRT 开发手册 nbsp nbsp nbsp 目 nbsp 录 nbsp 1 nbsp nbsp nbsp nbsp nbsp Birt 介绍 51 1 nbsp nbsp nbsp nbsp nbsp nbsp 报表介绍 nbsp 51 2 nbsp nbsp nbsp nbsp nbsp nbsp 基本概念 nbsp 51 3 nbsp nbsp nbsp nbsp 丰富的报表 nbsp 51 4 nbsp nbsp nbsp nbsp BIRT 报表由四部分组成 nbsp 61 5 nbsp nbsp nbsp nbsp 报表设计器 nbsp 62 nbsp nbsp nbsp nbsp nbsp Birt 插件安装 8

    2026年3月26日
    2
  • SQL中几个常用的排序函数

    SQL中几个常用的排序函数

    2021年11月26日
    48
  • php清除浏览器缓存代码,js清除浏览器缓存

    php清除浏览器缓存代码,js清除浏览器缓存本篇文章的内容是js清除浏览器缓存,在这里分享给大家,也可以给有需要的朋友做一下参考,大家一起来看一看吧一、meta方式一开始百度后的做法,但是在360中并不适应二、动态引入js+时间戳去除静态html的缓存–动态引入js文件动态引入js文件以及在js文件后边添加动态参数代码window.onload=function(){varscript=document.createElement(“s…

    2022年7月18日
    11

发表回复

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

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