久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C++ const型變量與函數(shù)重載

 蘇霈兒咪咪 2014-10-29

http://www.cnblogs.com/menggucaoyuan/archive/2011/06/17/2083255.html


C++中定義const型變量,,可以用一個(gè)非const型變量或者const變量初始化這個(gè)const變量,,但是如果不用類型強(qiáng)制轉(zhuǎn)換則不可以用一個(gè)const變量初始化一個(gè)非const變量,。另外,,我的觀點(diǎn)是const只能修飾一個(gè)變量,。

上面的最后一句話,,你可能有非議,我可以說明,。第一,,一個(gè)const不能修飾一個(gè)全局函數(shù)。第二,,你可能舉例說明C++的類中const可以修飾一個(gè)函數(shù),,但是你還記得每個(gè)函數(shù)中都可以用一個(gè)默認(rèn)的this指針,?C++編譯的時(shí)候會(huì)在函數(shù)的參數(shù)列表中添加一個(gè)類的this指針(靜態(tài)函數(shù)除外),此時(shí)如果函數(shù)被const修飾,,則這個(gè)const實(shí)際上是修飾這個(gè)this的,,const修飾的函數(shù)不能改變成員屬性值,其原因也在此,。

所以可以通過const修飾變量來實(shí)現(xiàn)函數(shù)重載,,即函數(shù)名稱、參數(shù)個(gè)數(shù),、參數(shù)類別都一樣,,唯一的區(qū)別在于變量是否為const修飾。

可能上面的解釋太羅嗦了,,還是一句“源碼之前,,了無秘密”:

class A

{

public:

    A() {}

    void func(int *a) //相當(dāng)于void func(int *a, A *this)

    {

        std::cout << "_func_int_ptr_" << std::endl;

    }

    void func(const int *a) //相當(dāng)于void func(const int *a, A *this)

    {

        std::cout << "_func_const_int_ptr_" << std::endl;

    }

    void func(int *a) const //相當(dāng)于void func(int *a, const A *this)

    {

        std::cout << "_const_func_int_ptr_" << std::endl;

    }

    void func(const int *a) const //相當(dāng)于void func(const int *a, const A *this)

    {

        std::cout << "_const_func_const_int_ptr_" << std::endl;

    }

};


int main(int argc, char* argv[])

{

    A a;

    int nValue = 3;

    const int nValueCnst = 3;

    a.func(&nValue);

    a.func(&nValueCnst);


    const A aa;

    aa.func(&nValue);

    aa.func(&nValueCnst);

    return 0;

}

其輸出為:

_func_int_ptr_

_func_const_int_ptr_

_const_func_int_ptr_

_const_func_const_int_ptr_

從這里可以看出,通過const修飾一個(gè)變量可以實(shí)現(xiàn)同名稱函數(shù)的重載,。

另外,,一個(gè)類的非const對象可以調(diào)用其const函數(shù),如果詳細(xì)參考第一段的解釋以及const函數(shù)編譯過程,,你應(yīng)該能明白其中的緣由,。原因就是可以用非const型對象非const型的this指針進(jìn)行初始化時(shí)。一個(gè)簡單的代碼例子如下:

class A

{

public:

    A() { }

    void func(int *a) const

    {

        std::cout << "_const_func_int_ptr_";

    }

};


int main(int argc, char* argv[])

{

    A a;

    int value = 3;

    a.func(&value);

    return 0;

}?

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多