• C++this指针


    本文旨在讲解C++中this关键字,以及其相关作用!


    定义

    this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。


    this的介绍

    下面来看一下关于this这个关键字的实例!

    1. class Data
    2. {
    3. private:
    4. int _year;
    5. int _month;
    6. int _day;
    7. public:
    8. void Init(int year,int month,int day)
    9. {
    10. cout << "this的地址"<<this << endl;
    11. _year = year;
    12. _month = month;
    13. _day = day;
    14. }
    15. }
    16. int main()
    17. {
    18. Data D1;
    19. Data D2;
    20. cout <<"D1的地址:"<< & D1 << endl;
    21. cout <<"D2的地址:"<< & D2 << endl;
    22. D1.Init(2013,11,15);
    23. D2.Init(2013, 11, 16);
    24. }

    通过观察上述代码,在main函数内部里,当使用Init函数时,并没有对Init函数进行传相应类的参数,那么编译器是如何将其正确赋值给相应的类呢?

    这时就引出了C++的关键字this!编译器通过this关键字来自动匹配传递的参数!下面来看一下msdn中关于对this关键字的简单介绍!

    简单介绍一下上述的意思,“this”指针仅仅存在于class,struct,union类型,它指向成员功能调用的目标,静态变量没有this这个指针!


    this指针内部详细介绍!

    通过下面代码,可以对this指针会有更深一步的认识!

    1. class Data
    2. {
    3. private:
    4. int _year;
    5. int _month;
    6. int _day;
    7. public:
    8. void Init(int year,int month,int day)
    9. {
    10. //this在实参和形参的位置不能显写,但是在类中变量可以显写!
    11. //this = nullptr;
    12. //通过在类中对this的操作,可以证明this指针确实存在!
    13. cout << "this的地址"<<this << endl;
    14. /* this->*/_year = year;
    15. /*this->*/_month = month;
    16. _day = day;
    17. }
    18. void print()
    19. {
    20. cout << _year << "-";
    21. cout << _month << "-";
    22. cout << _day;
    23. cout << endl;
    24. }
    25. };
    26. int main()
    27. {
    28. Data D1;
    29. Data D2;
    30. //通过观察D1,D2的地址,可以看出D1中的this的地址和D1的地址相同,可以推出this指针实际上是指向类的地址的指针的!
    31. cout <<"D1的地址:"<< & D1 << endl;
    32. cout <<"D2的地址:"<< & D2 << endl;
    33. D1.Init(2013,11,15);
    34. D2.Init(2013, 11, 16);
    35. D1.print();
    36. D2.print();
    37. }

    上述代码运行调试过后结果入下:

    通过上述调试的结果,可以更深了解this指针!


    this指针的特性

    1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。

    上实例当对this指针赋予nullptr时,编译器会报错,错误信息入下:

    2. 只能在“成员函数”的内部使用。

    3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给

    this形参。所以对象中不存储this指针。(可以通过对类的大小来判断类中是否存在了this指针!

    4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传

    递,不需要用户传递。


    this到底是什么

    this 实际上是成员函数的一个形参在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。
    this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值。


    至此,关于this指针的介绍结束,若还有其他特性,欢迎读者来进行补充,也欢迎各位指出不足!

  • 相关阅读:
    基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。
    OpenCV Series : Slope + Radian + Degree
    HarmonyOS/OpenHarmony(Stage模型)应用开发单一手势(三)
    基于Java的斗地主游戏案例开发(做牌、洗牌、发牌、看牌
    ArcGis Pro Geometry 方法小记
    定制activemq_RPM包,注册系统服务并开机自启
    SpringBoot+Vue+Element-UI实现在线外卖系统
    C语言c89(c90)的所有的32个关键字分类
    单片机中文编程器手机版:功能解析与用户体验
    Java GUI——Java图形用户界面
  • 原文地址:https://blog.csdn.net/weixin_71276184/article/details/132796173