2 回答

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
你的函數(shù)中沒(méi)有出現(xiàn)對(duì)成員變量的修改,應(yīng)該是沒(méi)有問(wèn)題的(除非你的num和denom沒(méi)定義,一一!)。
原因如下:
c++語(yǔ)言之所以靈活度高,那是因?yàn)閏+編譯器背著程序員做很多事情。比如這里的const。當(dāng)一個(gè)函數(shù)被用作成員函數(shù)時(shí),其實(shí)有一個(gè)隱式的this指針存在。成員函數(shù)會(huì)被編譯器改變?yōu)橐话愕娜趾瘮?shù),同時(shí)添加一個(gè)參數(shù),即該類的指針。
比如你的函數(shù)
void fraction::displayFrac() const
{
cout<<num<<'/'<<denom;
}
會(huì)被變?yōu)椋?br/>void displayFrac(fraction* this) const //所以說(shuō)成員函數(shù)和全局函數(shù)實(shí)質(zhì)上是一致的。
{
//注意多了this
cout<<this->num<<'/'<<this->denom;//這里我假設(shè)num和denom是類fraction的成員變量,而不是全局變量。
}
現(xiàn)在分析你的問(wèn)題:根據(jù)c++語(yǔ)法,當(dāng)const修飾成員函數(shù)時(shí),傳入的this指針變?yōu)橹赶虺?shù)的指針。由于this指針是指向你的對(duì)象(比如你的調(diào)用代碼為frac.displayFrac(),那么this指向?qū)ο骹rac),故而在函數(shù)內(nèi)不能通過(guò)this指針改變frac的值(即不能改變frac的數(shù)據(jù)成員)。
這里還涉及到常量指針和指針常量等問(wèn)題。如果不明白多翻翻語(yǔ)法書。反正記住一旦成員函數(shù)的函數(shù)體被const修飾,那么在該函數(shù)內(nèi)就不能改變類的數(shù)據(jù)成員,但是其他的改變(非類成員的賦值等)沒(méi)問(wèn)題。
添加回答
舉報(bào)