C++筆記五:const對象總結

來源:互聯網
上載者:User

        const對象

         如果你想定義一個永遠都不會改變的類對象,可以像下面這樣定義一個const對象

const CBox standard(10.0,10.0,10.0);

standard對象的成員變數的值將永不會改變。編譯器為了保證const對象不會改變,不允許調用const對象的非const成員函數。即使這個非const成員函數確實沒有改變任何成員變數的值。

          const對象的原理是把對象的this指標都變成指向const對象的指標(指標指向的內容不允許改變)。而調用對象的成員函數時隱含有一個this指標參數。而指向const對象的指標是不能隱式轉換成指向非const對象的指標的。普通成員函數隱含的this指標參數為指向非const對象的指標。所以調用const對象的成員函數將導致編譯器嘗試將指向const對象的指標轉換為指向非const對象指標,這是不允許的。所以通不過編譯。


       const成員函數

       1.const成員函數承諾不會改變對象的成員變數值。所以在const成員函數內不允許有改變成員變數值的操作。也不允許調用對象的非const成員函數,只能調用const成員函數。 

       2.const成員函數的聲明和定義都必須使用const關鍵字(如果定義和實現是分開的),緊跟在函數參數列表後的反括弧之後。就像下面這樣:

class CBox{public:explicit CBox(double lv = 1.0,double bv = 1.0,double hv = 1.0){//...}double Volume() const;private:double m_Length;double m_Width;double m_Height;};double CBox::Volume() const{return m_Length*m_Height;}

及時傳回值、函數名和參數完全相同,有const修飾符和沒有const修飾符的函數是不同的。(const修飾符也是函數簽名的一部分?)。所以你可以定義同一個函數的const和非const版本。


建議:定義類時,最好把不會改變成類員變數的成員函數都定義為const函數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.