星期四, 7月 02, 2009

C++ object 與 member functions 的 const 修飾字筆記

Q: C++ 中為什麼有的 member functions 後面會有 const 修飾字?

A: C++ object 與 member functions 的 const 修飾字表示的意義如下:

  1. 當一個 member function 宣告為 const 時,表示 *this 無法修改的,也就是無法修改其中的 data members。
  2. 只有宣告為 const 的 object 才可以存取被宣告為 const 的 member function。
  3. 宣告為 const 的 object 無法呼叫宣告為 non-const 的 member functions。
  4. 這是為了避免在無法預期的狀況下被 member functions 修改到 *this 或其中的 data members。
  5. 然而 const member function 可以被 overloaded 成 non-const member function,宣告為 non-const object 時會呼叫 non-const member function,宣告為 const object 會呼叫 const member function。
  6. constructor 與 destructor 是例外,無法被宣告為 const,因為這兩個 member function 都會修改 *this。
  7. const object 需要初始化 (initialization) data members。


範例:
#include 
using namespace std;

class CBox
{
    public:
    CBox(int length, int width, int height): m_length(length),
         m_width(width), m_height(height)
    {
        cout << endl << "constructor called.";
    }

    virtual ~CBox()
    {
        cout << endl << "decontructor called.";
    }

    int volume() const
    {
        return m_length * m_width * m_height;
    }

    private:
        int m_length;
        int m_width;
        int m_height;
};

int main (int argc, char **argv)
{
    const CBox abox(2, 3, 4);
    cout << endl << "volume:" << abox.volume();
    return 0;
}

沒有留言: