2017年計(jì)算機(jī)等級(jí)考試二級(jí)C++輔導(dǎo):C++編譯期間類中的常量

字號(hào):


    問(wèn)題:在類中建立一個(gè)int類型的數(shù)組
    方法一:(錯(cuò)誤)
    class Test
    {
    const int size = 100;
    int array[size];
    //……
    };
    錯(cuò)誤原因:
    1:因?yàn)樵谝粋€(gè)類中,const恢復(fù)了它在c中的一部分意思,在每個(gè)類對(duì)象里分配存儲(chǔ)并代表一個(gè)值,這個(gè)值一旦被初始化以后就不能被改變。所以在類中使用了const的意思是:在這個(gè)對(duì)象的生命周期內(nèi),它是一個(gè)常量。
    然而,每個(gè)對(duì)象可能包含不同的值。
    2:對(duì)const常量進(jìn)行了初始化,C++中這個(gè)初始化必須由構(gòu)造函數(shù)完成,如const常量在初始化列表中進(jìn)行初始化。
    方法二:(正確,有缺陷)
    使用enum;
    class Test
    {
    enum { size = 100};
    int array[size];
    //……
    };
    使用enum不會(huì)占用對(duì)象中的存儲(chǔ)空間的,枚舉常量在編譯的時(shí)候被全部求值。
    缺點(diǎn):
    假如定義一個(gè)非整型的常量該如何?enum無(wú)法完成此項(xiàng)操作,同時(shí)喪失了枚舉本來(lái)的作用。
    方法三:(正確,)
    使用靜態(tài)常量;
    class Test
    {
    static const int size;
    int array[size];
    //……
    };
    const int Test::size = 100;
    它既是常量,不能改變,又是靜態(tài),在類中只有一個(gè)定義點(diǎn)。所以能夠完成任務(wù)。
    同時(shí),它可以定義任何與定義類型的常量。