文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++中类的this指针怎么使用

2023-06-29 08:02

关注

这篇“C++中类的this指针怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++中类的this指针怎么使用”文章吧。

c++的类中,非静态的成员函数都有一个隐藏的this指针,在函数体中所以的成员变量都是通过this指针来访问的。但是this指针是对用户是透明的,用户不需要显示的给this指针传参,编译时会自动接收参数。

,this指针的注意点

用一个日期类,来讲述this指针的注意点:

class Date{ public: void Print() {  cout<<_year<<"/"<<_month<<"/"<<_day<<endl; } Date (int year,int month,int day) {  _year=year;  _month=month;  _day=day; ] private: int _year; int _month; int _day;}

以上就是一个日期类了,在类里面我定义了一个成员函数Print,这里要讲一下,在类中定义一个成员函数可能会被看成内联函数,想这么简单一个Print 函数一般是会别看成内联函数的。

其实这个成员函数还可以写成这样:

void Print(){ cout<<this->_year<<"/"<<this->_month<<"/"<<this->day<<endl;}

这样写有点画蛇添足的感觉,但是方便大家看,在成员函数中每个成员变量的访问都里离不开this指针。这个this指针隐藏在函数形参的头一位,也就是Print(Date * this)。

比如我要调用这个成员函数:

int main(){ Date s1(2022,2,28); Date s2(2022,3,1); s1.Print(); s2.Print();}

运行结果如下:

C++中类的this指针怎么使用

可以看到,调用结果是符合预期的,Print函数中是利用this指针来区分对象的。

错误用例:

(1)

int main(){ Date s1(2022,2,28); s1.Print(&s1);}

不可以显示的给this指针传参,虽然我们知道this指针存在,但是我们不可以给this指针传参,就当潜规则吧。

(2)

void Date::Print(Date* this);

成员函数的声明以及定义都不能有this指针,这样做不行的,可以想想设计者的初心,他是嫌弃老是传地址麻烦,所以搞了一个隐藏的this指针,你再给函数传参或者定义函数时给this指针,不是多此一举嘛。

二,this指针存在哪里

this指针是成员函数第一个隐藏的指针形参,一般存在栈中。但是也是由编译器决定的,有的就存在寄存器中。

三,this指针的面试坑题

class A{ public: void PrintA()  { cout<<_a<<endl; } void Show() { cout<<"Show()"<<endl; }private: int _a;};int main(){ A* p = nullptr; p->PrintA();  p->Show(); }

问:以上程序可以运行嘛?会崩溃嘛?崩溃在哪里?

C++中类的this指针怎么使用

这是对空指针解引用导致的内存问题,所以程序崩溃了,this指针可以为空,但是不能对空指针解引用,函数PrintA中,cout<<_a<;可以写成cout<< this -> _a<; 讲到这大家应该懂了。

还有一点那么Show函数有问题嘛?没问题,因为不存在对this的解引用。

我们将PrintA函数屏蔽掉,看运行结果:

C++中类的this指针怎么使用

以上就是关于“C++中类的this指针怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯