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修饰,那么在该函数内就不能改变类的数据成员,但是其他的改变(非类成员的赋值等)没问题。
添加回答
举报