C++ this指針與const成員函數

C++ this指針與const成員函數

this指針

  • 每個對象擁有一個this指針,通過this指針來訪問自己的地址。

  • this指針並不是對象的一部分,this指針所佔的內存大小是不會反應在sizeof操作符上的

  • this指針只能在成員函數中使用,全局函數、靜態函數都不能使用this指針

  • **在普通成員函數中,this是一個指向非const對象的const指針(如類類型爲Student,那麼this就是Student *const類型的指針);
    在const成員函數中,this指針是一個指向const對象的const指針(如類類型爲Student,那麼this就是const Student * const類型的指針)**

  • this指針在成員函數開始執行前構造,在成員函數執行結束後銷燬。

const對象與const成員函數

  • 在成員函數參數列表後面加上const修飾,表示函數內this指針是一個指向常量對象的指針,不能修改成員變量
void Person::setName(string name) const
{
    this->name = name;
} //錯誤,const成員函數不能修改成員變量
  • 一個const成員函數如果以引用的形式返回*this,那麼它的返回類型是常量引用

  • 對於const對象或者const對象的引用和指針,對象內的成員變量是不能修改的,因此只能調用const成員函數,不會修改成員變量
    對於非const對象,既可以調用const成員函數,也可以調用非const成員函數。

int Person::getId()const
{
    return this->id;
}
string Person::getName()
{
    return this->name;
}
const Person p(1,"yuewenlong");
p.getId();    //正確,getId爲const成員函數
p.getName();  //錯誤,p爲const對象,不能調用非const成員函數
const Person p1(2,"dengqilong");
p.getId();    //正確,普通對象可以調用const成員函數
p.getName();  //正確,普通對象可以調用非const成員函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章