为了账号安全,请及时绑定邮箱和手机立即绑定

请问为什么在类中用const修饰函数void displayFrac()

请问为什么在类中用const修饰函数void displayFrac()

眼眸繁星 2021-12-31 15:11:13
void fraction::displayFrac() const{ cout<<num<<'/'<<denom;}类名为fraction
查看完整描述

2 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

你的函数中没有出现对成员变量的修改,应该是没有问题的(除非你的num和denom没定义,一一!)。
原因如下:
c++语言之所以灵活度高,那是因为c+编译器背着程序员做很多事情。比如这里的const。当一个函数被用作成员函数时,其实有一个隐式的this指针存在。成员函数会被编译器改变为一般的全局函数,同时添加一个参数,即该类的指针。
比如你的函数
void fraction::displayFrac() const
{
cout<<num<<'/'<<denom;
}
会被变为:
void displayFrac(fraction* this) const //所以说成员函数和全局函数实质上是一致的。
{
//注意多了this
cout<<this->num<<'/'<<this->denom;//这里我假设num和denom是类fraction的成员变量,而不是全局变量。
}
现在分析你的问题:根据c++语法,当const修饰成员函数时,传入的this指针变为指向常数的指针。由于this指针是指向你的对象(比如你的调用代码为frac.displayFrac(),那么this指向对象frac),故而在函数内不能通过this指针改变frac的值(即不能改变frac的数据成员)。

这里还涉及到常量指针和指针常量等问题。如果不明白多翻翻语法书。反正记住一旦成员函数的函数体被const修饰,那么在该函数内就不能改变类的数据成员,但是其他的改变(非类成员的赋值等)没问题。


查看完整回答
反对 回复 2022-01-03
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

这种语法表示该函数不会修改类成员变量

查看完整回答
反对 回复 2022-01-03
  • 2 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号