程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ 之 常量成員函數,常量成員函數

C++ 之 常量成員函數,常量成員函數

編輯:C++入門知識

C++ 之 常量成員函數,常量成員函數


  類的常量成員函數(const member function), 可以讀取類的數據成員,但是不能修改。

1  聲明

  在成員函數聲明的參數列表後,加上 const 關鍵字,聲明為常量成員函數(const member function),表明其不被允許修改類的數據成員

  下面代碼,定義了一個 Date 類,分別以年、月、日的形式來表示日期

class Date {
public:
    int day() const { return d; }
    int month() const { return m; }
    int year() const;
    void add_year(int n); // add n years
private:
    int d, m, y;
};

1) 如果常量成員函數,企圖修改類的數據成員,則編譯器會報錯

// error : attempt to change member value in const function
int Date::year() const
{
    return ++y; 
}

2) 如果在類外面,定義常量成員函數,則 const 關鍵字不可省略

// error : const missing in member function type
int Date::year() 
{
    return y;
}

 

2  調用

  一個常量成員函數,可以被 const 和 non-const 類對象調用; 而非常量成員函數(non-const member function),則只能被 non-const 型類對象調用。

void f(Date& d, const Date& cd)
{
    int i = d.year();    // OK
    d.add_year(1);        // OK
int j = cd.year(); // OK cd.add_year(1); // error }

 
3  this 指針

  <C++ Primer> 中,有關於 const 後綴更詳細的解釋:

  this 默認是指向 non-const 型類對象的 const 型指針,因此,不能將 this 指針和 const 型類對象綁定,即 const 類對象無法調用類的成員函數

// 默認的 this 指針,指向 non-const 類對象
Date * const this;

   在成員函數聲明的參數列表後加 const 後綴,表明其 this 指針指向 const 型類對象,如此, const 型類對象便可以調用常量成員函數了

// 常量成員函數中的 this 指針,指向 const 類對象
const Date * const this;

 

小結:

1) 類成員函數聲明中的 const 後綴,表明其 this 指針指向 const 型類對象,因此該 const 類對象,可以調用常量成員函數(const member function)

2) 一個成員函數,如果對數據成員只涉及讀操作,而不進行修改操作,則盡可能聲明為常量成員函數

 

參考資料:

 <C++ Programming Language_4th> ch 16.2.9.1

 <C++ Primer_5th> ch 7.1.2

 <Effective C++_3rd> Item 3

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved