C++ const用法

一 修飾類

C++中const修飾類主要包括3個(gè)部分:數(shù)據(jù)成員,成員函數(shù),對(duì)象。

  1. 數(shù)據(jù)成員

    const 修飾類的成員變量,表示成員常量,不能被修改,同時(shí)它只能在初始化列表中賦值 (c11 中支持類中初始化)。可被 const 和非 const 成員函數(shù)調(diào)用,而不可以修改。

    class A
    {
    private:
        const int num;
    public:
        A():num(100){}//在初始化列表中賦值
        ~A();
    };
    
    class A
    {
    private:
        const int num=200;//在C++11中支持類中初始化
    public:
        A();
        void print(){
            cout<<num<<endl;
        }
        ~A();
    };
    
  2. 成員函數(shù)

    (1)const 修飾函數(shù)

    承諾在本函數(shù)內(nèi)部不會(huì)修改類內(nèi)的數(shù)據(jù)成員,也不會(huì)調(diào)用其它非 const 成員函數(shù)(因?yàn)槠渌莄onst成員函數(shù)可能存在修改數(shù)據(jù)成員的嫌疑)

    (2)const 修飾函數(shù)位置

    const 修飾函數(shù)放在,聲明之后,實(shí)現(xiàn)體之前,大概也沒(méi)有別的地方可以放了。

     void dis() const 
     {}
    

    (3)const 構(gòu)成函數(shù)重載

    class A
    {
    public:
        A() : x(199), y(299) {}
        void dis() const //const 對(duì)象調(diào)用時(shí),優(yōu)先調(diào)用
        {
            //input();不能調(diào)用 非const函數(shù),因?yàn)楸竞瘮?shù)不會(huì)修改,無(wú)法保證所調(diào)的函數(shù)也不會(huì)修改
            cout << "x " << x << endl;
            cout << "y " << y << endl;
            //y =200; const 修飾函數(shù)表示承諾不對(duì)數(shù)據(jù)成員修改。
        }
        void dis() //此時(shí)構(gòu)成重載,非 const 對(duì)象時(shí),優(yōu)先調(diào)用。
        {
            y = 200;
            input();
            cout << "x " << x << endl;
            cout << "y " << y << endl;
        }
        void input()
        {
            cin >> y;
        }
    
    private:
        const int x;
        int y;
    };
    

    總結(jié):

    • 如果 const 構(gòu)成函數(shù)重載,const 對(duì)象只能調(diào)用 const 函數(shù),非 const 對(duì)象優(yōu)先調(diào)
      用非 const 函數(shù)。
    • const 函數(shù)只能調(diào)用 const 函數(shù)。非 const 函數(shù)可以調(diào)用 const 函數(shù)。
    • 在類外定義的 const 成員函數(shù),在定義和聲明處都需要 const 修飾符。
  3. 對(duì)象

 const A a; 
 a.dis();

總結(jié):

  • const 對(duì)象,只能調(diào)用 const 成員函數(shù)。
  • 可訪問(wèn) const 或非 const 數(shù)據(jù)成員,不能修改。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。