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

void fraction::displayFrac() const
{
cout<<num<<'/'<<denom;
}
类名为fraction

眼眸繁星
浏览 185回答 2
2回答

至尊宝的传说

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

白衣染霜花

这种语法表示该函数不会修改类成员变量
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Python