常成員函數不能改變數據成員的值,例如定義坐標類Coordinate,成員函數changeX():void Coordinate::changeX(){ x = 10;}雖然changeX()沒有參數,但是它隱含一個參數——this指針:void Coordinate::changeX(Coordin... ...
常成員函數不能改變數據成員的值,例如定義坐標類Coordinate,成員函數changeX():
void Coordinate::changeX() { x = 10; }
雖然changeX()沒有參數,但是它隱含一個參數——this指針:
void Coordinate::changeX(Coordinate* this) { this->x = 10; }
所以對於使用了const修飾的常成員函數:
void Coordinate::changeX() const { x = 10; }
編譯器就會把它理解為:
void Coordinate::changeX(const Coordinate* this) { this->x = 10; }
顯然通過常指針去修改它所指向的數據,是不允許的。
另外常成員與非常成員函數可以重載:
void changeX(); viod changeX() const;
那什麼情況下調用常成員函數呢?這就需要調用常成員函數的對象在實例化的時候使用const修飾,得到一個常對象,進而調用的時候將調用常成員函數。