HelloMyWorld__ 2022-11-09 18:25 采纳率: 60%
浏览 11
已结题

c++,this指针是常量指针,为什么还是可以指向不同的对象?

c++,this指针是常量指针,为什么还是可以指向不同的对象?

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-11-09 20:11
    关注
    • 这个问题的回答你可以参考下: 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条)

报告相同问题?

问题事件

  • 系统已结题 11月21日
  • 已采纳回答 11月13日
  • 创建了问题 11月9日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。