const函數 和非const函數

來源:互聯網
上載者:User
一、有兩種const函數:1、const T func();
    表示返回的是const的類型,也即返回的值不能作為左值。
2、T func() const;    表示該成員函數不能修改其成員變數的值,即該函數不能改變任何該類的非靜態成員的值。
例:
class A{public:  int get_a() const{return a;}private:int a;int b;}這裡只是擷取a而已,不想改變成員a的值,所以就可以定位為const函數。


註:const 對於類的封裝是很有好處的,要知道用const定義後,其值是不能隨便改變的,相當於一個常量。如果類中的成員能隨便改變其屬性,類就會很混亂,代碼的重複利用就很差,不利於編程。
二、常對象的就調用const函數,其他的調用非const函數
const函數是常成員函數,只能由常對象調用,是常對象唯一的對外介面

class B1

{
public:
virtual void func() const  //與下面的同名函數不屬於重載,完全是沒有關係的兩個函數
{
cout << "Const\n";
}
virtual void func() 
{
cout << "Non Const\n";
}
};

int main() 
{
B1 b;
B1 const b1;
b.func();   //調用普通函數
b1.func(); //調用const函數,const成員函數成為“唯讀”函數所以只能調用const成員函數。
return 0;

}

三、其他說法

後面加const表示在該函數中不能對類的資料成員進行改變比如:class A{  private:     int aa;
public:
   int x()//這可以,普通函數{ return aa++; } //這可以int x() const //const函數{return aa++;//這錯誤}};但mutable關鍵字修飾過的成員變數可以在聲明為const 函數中被改變。關於mutable:關鍵字mutable是C++中一個不常用的關鍵字,只能用於類的非靜態和非常量資料成員  一個對象的狀態由該對象的非待用資料成員決定,所以隨著資料成員的改變,  對像的狀態也會隨之發生變化!   如果一個類的成員函數被聲明為const類型,表示該函數不會改變對象的狀態,也就是該函數不會修改類的非待用資料成員.但是有些時候需要在該類函數中對類的資料成員  進行賦值.這個時候就需要用到mutable關鍵字了  例如:   class Demo  {  public:  Demo(){}  ~Demo(){}  public:  bool getFlag() const  {  m_nAccess++;  return m_bFlag;  }  private:  int m_nAccess;  bool m_bFlag;  };   int main()  {  return 0;  }   編譯上面的代碼會出現 error C2166: l-value specifies const object的錯誤  說明在const類型的函數中改變了類的非待用資料成員.  這個時候需要使用mutable來修飾一下要在const成員函數中改變的非待用資料成員  m_nAccess,代碼如下:   class Demo  {  public:  Demo(){}  ~Demo(){}  public:  bool getFlag() const  {  m_nAccess++;  return m_bFlag;  }  private:  mutable int m_nAccess;//此時該變數則變為可 修改  bool m_bFlag;  };   int main()  {  return 0;  }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.