c++,this指针是常量指针,为什么还是可以指向不同的对象?
2条回答 默认 最新
关注 - 这个问题的回答你可以参考下: https://ask.csdn.net/questions/339624
- 你也可以参考下这篇文章:C++类与对象(类的引入,this指针)
- 同时,你还可以查看手册:c语言-指针 中的内容
- 除此之外, 这篇博客: C++类与对象(类的引入,this指针)中的 this指针的引入 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
来看下面一段代码:
class Data { private: int _year; int _month; int _day; public: void Init(int year, int month, int day) { _year = year; _month = month; _day = day; } void Print() { cout << _year << " " << _month << " " << _day << endl; } }; int main() { Data d1; Data d2; d1.Init(2022, 2, 25); d2.Init(2022, 2, 26); d1.Print(); d2.Print(); return 0; }
我们都知道,在定义对象的时候,对象中只存储成员变量而不存储成员函数,那么在调用Print函数时,编译器是如何知道打印的是d1中的值,还是d2中的值呢?
这就需要引入this指针这个概念,其实Print()函数中,并不是没有参数,而是参数被隐藏了,编译器处理的真实情况是:d1.Print(&d1),而接收d1的地址的指针我们称为this指针,它的类型为**const Data* 名为this。即类中定义的函数真实是:Print(const Data this)。
而在函数内部,打印的时候,其实打印的是this->_year,this->_month。
同理在Init函数中,也会将this指针传入,真实传入实际上是:d1.Init(&d1,2022,2,25)
注意:虽然编译器默认如此,但是不能自己像这样将this指针写进去d1.Init(&d1,2022,2,25),d1.Print(&d1),Print(const Data this),如果一定要写的话,可以在函数内部去写this->_year,this->_month。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥100 无网格伽辽金方法研究裂纹扩展的程序
- ¥15 错误于library(org.Hs.eg.db): 不存在叫‘org.Hs.eg.db’这个名称的程序包,如何解决?
- ¥60 求一个图片处理程序,要求将图像大小跟现实生活中的大小按比例联系起来的
- ¥50 求一位精通京东相关开发的专家
- ¥100 求懂行的大ge给小di解答下!
- ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
- ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
- ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
- ¥100 华为手机私有App后台保活
- ¥15 sqlserver中加密的密码字段查询问题