真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

類中的函數(shù)重載(二十三)

        今天我們來講講函數(shù)重載。函數(shù)重載的本質(zhì)為相互獨立的不同函數(shù),在 C++ 中通過函數(shù)名和函數(shù)參數(shù)確定函數(shù)調(diào)用。是無法直接通過函數(shù)名得到重載函數(shù)的入口地址的,函數(shù)重載也必然發(fā)生在同一個作用域中。類中的成員函數(shù)也是可以進行重載的:構(gòu)造函數(shù)的重載,普通成員函數(shù)的重載以及靜態(tài)成員函數(shù)的重載。那么全局函數(shù),普通成員函數(shù)以及靜態(tài)成員函數(shù)之間可以構(gòu)成重載嗎?重載函數(shù)的本質(zhì)為多個不同的函數(shù),函數(shù)名和參數(shù)列表是唯一的標識,函數(shù)重載必須發(fā)生在同一個作用域中。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供和政網(wǎng)站建設、和政做網(wǎng)站、和政網(wǎng)站設計、和政網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、和政企業(yè)網(wǎng)站模板建站服務,十年和政做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

        下來我們以代碼為例進行分許,來回答上面提出的問題

#include 

class Test
{
    int i;
public:
    Test()
    {
        printf("Test::Test()\n");
        
        this->i = 0;
    }
    
    Test(int i)
    {
        printf("Test::Test(int i)\n");
        
        this->i = i;
    }
    
    Test(const Test& obj)
    {
        printf("Test::Test(const Test& obj)\n");
        
        this->i = obj.i;
    }
    
    static void func()
    {
        printf("void Test::func()\n");
    }
    
    void func(int i)
    {
        printf("void Test::func(int i): %d\n", i);
    }
    
    int getI()
    {
        return i;
    }
};

void func()
{
    printf("void func()\n");
}

void func(int i)
{
    printf("void func(int i): %d\n", i);
}

int main()
{
    Test t;        // Test::Test
    Test t1(1);    // Test::Test(int i)
    Test t2(t1);   // Test(const Test& obj)
    
    func();        // void func()
    Test::func();  // void Test::func()
    
    func(2);       // void func(int i), i = 2;
    t1.func(2);    // void Test::func(int i), i = 2
    t1.func();     // void Test::func()
    
    return 0;
}

        我們看到在類里面定義了三種構(gòu)造函數(shù),它們也構(gòu)成了重載關(guān)系,還有兩個 func 函數(shù)。在全局函數(shù)中也定義了兩個重載函數(shù),它們和類中定義的函數(shù)也能構(gòu)成重載嗎?沒在一個作用域,肯定是不行的。下來我們看看編譯結(jié)果,看看分析的對不對

類中的函數(shù)重載(二十三)

        我們看到分析的和編譯的結(jié)果是一致的。那么重載的意義是什么呢?a> 通過函數(shù)名對函數(shù)功能進行 提示;b> 通過參數(shù)列表對函數(shù)用法進行提示;c> 擴展系統(tǒng)中已經(jīng)存在的函數(shù)功能;下來我們通過一個示例代碼進行說明

#include 
#include  

/*
char* strcpy(char* buf, const char* str, unsigned int n)
{
    return strncpy(buf, str, n);
}
*/
int main()
{
    const char* s = "hello world";
    char buf[8] = {0};
    
    strcpy(buf, s);
    // strcpy(buf, s, sizeof(buf)-1);
    
    printf("%s\n", buf);
    
    return 0;
}

        我們寫了一個 strcpy 重載函數(shù),我們先將他注釋掉。首先來調(diào)用系統(tǒng)中自帶的 strcpy 函數(shù),看看編譯結(jié)果

類中的函數(shù)重載(二十三)

        我們看到它在運行的時候報段錯誤了。我們再來試試自己寫的重載函數(shù)呢

類中的函數(shù)重載(二十三)

        我們看到已經(jīng)成功實現(xiàn)了,當然重載函數(shù)的內(nèi)部是調(diào)用 strncpy 函數(shù)來實現(xiàn)的。但是我們只是復制,并不想考慮那么多,所以想直接用 strcpy 函數(shù)來實現(xiàn)這個功能,這樣就很直接了。由此可見,重載能夠擴展系統(tǒng)中已經(jīng)存在的函數(shù)功能?。∧敲粗剌d是否也能夠擴展其他更多的功能呢?比如直接用 + 號來實現(xiàn)復數(shù)的相加呢?我們后面接著繼續(xù)討論。通過對類中的重載函數(shù)的學習,總結(jié)如下:1、類的成員函數(shù)之間可以進行重載,重載必須發(fā)生在同一個作用域中;2、全局函數(shù)和成員函數(shù)不能構(gòu)成重載關(guān)系;3、重載的意義在于擴展已經(jīng)存在的功能。

        歡迎大家一起來學習 C++ 語言,可以加我QQ:243343083。


網(wǎng)站題目:類中的函數(shù)重載(二十三)
分享鏈接:http://weahome.cn/article/pcpoes.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部