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


相关推荐

  • 批处理for命令的用法_批处理for命令详解

    批处理for命令的用法_批处理for命令详解for/?1.对一组文件中的每一个文件执行某个特定命令。for%variablein(set)docommand[command-parameters]for%%variablein(set)docommand [command-parameters]%variable指定一个单一字母可替换的参数。set表示字符串或变量,当表示多个变量时,中间可以,空格等隔开…

    2022年9月2日
    2
  • 安卓系统usb调试在哪_安卓手机的usb调试

    安卓系统usb调试在哪_安卓手机的usb调试Android手机USB调试在哪?安卓手机如何打开USB调试模式?如果我们要将安卓手机连接到电脑上,从而传输文件、下载应用或ROOT等,都需要打开手机的USB调试模式。安卓系统的版本有很多,它们的打开方法也各不相同,下面给大家介绍各版本安卓手机打开USB调试模式的方法。步骤方法:一、2.1—2.3.7系统打开方法1、点击手机-Menu键(菜单键),在弹出的菜单中选择设置(Setting),或在应…

    2022年9月13日
    0
  • 用c语言做简单动画_用C语言编写动画

    用c语言做简单动画_用C语言编写动画你的意思还是不太明白我这有个程序你看看能不能帮我改一下#include#include#definePI3.14intcxClient,cyClient;floati,j,x,y;LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);intWINAPIWinMain(HINSTANCEhInstance,…

    2022年8月12日
    3
  • 什么是SSH 以及常见的ssh 功能

    什么是SSH 以及常见的ssh 功能什么是SSH?简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者TatuYlonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目…

    2022年7月13日
    11
  • RedisClient 可视化Redis工具下载「建议收藏」

    RedisClient 可视化Redis工具下载「建议收藏」https://github.com/caoxinyu/RedisClient网站下边的文档说明中如果电脑没有JDK,则点redisclient-win32.x86.2.0.exe如果有JDK,若是64位系统则点redisclient-win32.x86_64.2.0.jar32位系统点redisclient-win32.x86.2.0.jar…

    2022年10月12日
    0
  • visual studio code使用方法_vscode自定义代码块

    visual studio code使用方法_vscode自定义代码块snippet,也即代码片,指的是能够帮助输入重复代码模式,比如循环或条件语句,的模板。本文即旨于详实地介绍如何在vscode中设置snippet。

    2022年10月2日
    0

发表回复

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

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