0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++中不一樣的重載是什么

汽車電子技術(shù) ? 來(lái)源:程序喵大人 ? 作者:程序喵 ? 2023-02-21 14:02 ? 次閱讀

關(guān)于什么是重載想必大家都知道,無(wú)非就是參數(shù)個(gè)數(shù)不同,參數(shù)類型不同可以重載,這里我就不過(guò)多介紹啦。

這里想分享C++中一個(gè)不一樣的重載,即const重載。

可以看下面的代碼:

struct A {
    int count() {
        std::cout << "non const" << std::endl;
        return 1;
    }


    int count() const {
        std::cout << "const" << std::endl;
        return 1;
    }
};


int main() {
    A a;
    a.count();
    const A b;
    b.count();
}

這段代碼會(huì)輸出什么?

?

?

?

?

輸出的是這樣:

non const
const

不知道大家平時(shí)有沒(méi)有關(guān)注過(guò)這種用法,沒(méi)關(guān)注過(guò)可以繼續(xù)向下看哈。

圖片

從上面的輸出結(jié)果我們也可以看到,const修飾的對(duì)象調(diào)用的是使用const修飾的方法,非const對(duì)象調(diào)用的是非const的方法。

然而想必大家都知道對(duì)象調(diào)用的原理:

看下面的這段代碼:

A a;
a.func();

其實(shí)到底層,函數(shù)可能會(huì)變成這樣:

func(A* a);

函數(shù)是在代碼段,對(duì)象是在數(shù)據(jù)段,調(diào)用不同對(duì)象的函數(shù),其實(shí)只不過(guò)是同一個(gè)函數(shù),傳遞了不同的數(shù)據(jù)參數(shù)而已。

上面的是把對(duì)象的this指針傳進(jìn)去。

再回到上面的代碼:

struct A {
    int count() {
        std::cout << "non const" << std::endl;
        return 1;
    }


    int count() const {
        std::cout << "const" << std::endl;
        return 1;
    }
};

可以理解為:

int count(A *);
int count(const A*);

咦,這不就是重載嗎,難道還有const重載?

還真有,看下這段代碼:

struct A {
    int count(const int& s) {
        std::cout << "const" << std::endl;
        return 1;
    }


    int count(int& s) {
        std::cout << "non const" << std::endl;
        return 1;
    }
};


int main() {
    A a;
    a.count(4);
    int c = 5;
    a.count(c);
}

輸出如下:

const
non const

所以得出結(jié)論:

不只是參數(shù)類型和個(gè)數(shù)不同會(huì)產(chǎn)生重載,const修飾的參數(shù)也會(huì)有重載。

但是只有當(dāng)const修飾的是指針或者引用類型時(shí)才可以,普通的int和const int會(huì)編譯失敗的,具體大家可以自己寫代碼試試。

這里大家也可以想想,問(wèn)什么一定要指針或者引用類型時(shí)重載才可以呢?

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73645
  • CONST
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    8165
  • 重載
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    2761
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C++的結(jié)構(gòu)和類

    。C++ 有結(jié)構(gòu),就像 C 一樣,因?yàn)樗鼈兪?b class='flag-5'>不一樣的。C++ 有類,它們與結(jié)構(gòu)非常相似。本文解開(kāi)這些語(yǔ)言元素的細(xì)節(jié)。
    發(fā)表于 07-18 17:37 ?808次閱讀

    線損校準(zhǔn),為啥不一樣

    線損校準(zhǔn),為啥不一樣,今天測(cè)試時(shí)發(fā)現(xiàn),校準(zhǔn)是,信號(hào)源頻率不一樣,線損差別很大,有1dB 多!?。?/div>
    發(fā)表于 06-05 13:58

    數(shù)據(jù)類型不一樣和接口 怎么解決

    要怎么解決接口和產(chǎn)生的數(shù)據(jù)類型不一樣的問(wèn)題,然后利用MYRIO的模擬輸出通道接到示波器里面為什么沒(méi)有波形啊,數(shù)據(jù)類型應(yīng)該是不一樣,要怎么解決這個(gè)問(wèn)題呢?
    發(fā)表于 05-09 01:00

    一樣c文件但keil的輸出文件不一樣

    一模一樣的啊,還有都能編譯通過(guò)和下載,不知道這是什么原因,還有就是我對(duì)比發(fā)現(xiàn)這兩個(gè)工程的輸出文件的有差別,是不是keil沒(méi)有設(shè)置好導(dǎo)致輸出文件不一樣,進(jìn)而導(dǎo)致程序運(yùn)行結(jié)果不一樣啊,求高手指點(diǎn)
    發(fā)表于 03-07 08:26

    程序編輯器結(jié)果不一樣

    有個(gè)程序段int i=1;int j=0;j=((i++)*(i++));printf(“%d,%d\n”,i,j);在不同的編輯器結(jié)果為什么不一樣 我用虛擬機(jī)的VI編輯結(jié)果i=3;j=1;用C++編輯結(jié)果i=3;j=2;到底結(jié)果哪個(gè)才正確?迷茫了就指教!謝謝
    發(fā)表于 03-13 02:22

    為什么我的淚滴不一樣

    我的淚滴怎么和網(wǎng)上的不一樣??
    發(fā)表于 03-13 15:23

    為什么c語(yǔ)言中a和b的值不一樣,c和d的值不一樣?

    ];a = sizeof(table1);b = sizeof((u8)table1);c = sizeof(table2);d = sizeof((u32)table2);為什么a和b的值不一樣?????為什么c和d的值
    發(fā)表于 09-29 08:50

    請(qǐng)問(wèn)C++ primer和C++primer plus這兩本書有什么不一樣?

    如題這兩本書有什么不一樣嗎?望讀過(guò)的大神們說(shuō)說(shuō)啊?給小弟提個(gè)意見(jiàn),該選哪本好???ps:看了《指針和C》,但是C++基礎(chǔ)點(diǎn)都沒(méi)有。
    發(fā)表于 10-31 23:13

    c++c語(yǔ)言之間有什么區(qū)別

    C++是在C語(yǔ)言的基礎(chǔ)上發(fā)展來(lái)的,但是并不是C++C語(yǔ)言高級(jí),兩者的編程思想不一樣,應(yīng)用的領(lǐng)域也不一樣
    發(fā)表于 12-11 10:17 ?3.1w次閱讀

    氣密性測(cè)試與氣壓測(cè)試有什么不一樣的呢?

    氣密性測(cè)試與氣壓測(cè)試有什么不一樣的呢?
    發(fā)表于 12-27 15:38 ?4532次閱讀

    C++函數(shù)重載的使用

    重載,顧名思義從字面上理解就是重復(fù)裝載,打個(gè)不恰當(dāng)?shù)谋确剑憧梢杂?b class='flag-5'>一個(gè)籃子裝蔬菜,也可以裝水果或者其它,使用的是同個(gè)籃子,但是可以用籃子重復(fù)裝載的東西
    的頭像 發(fā)表于 04-15 11:22 ?615次閱讀

    電容容量一樣大小不一樣能用嗎

    有時(shí)候家里面電器的電容損壞,很多人很難找到一模一樣的來(lái)更換,能找到容量致的電容器就不容易了,電容容量一樣大小不一樣能用嗎?
    的頭像 發(fā)表于 09-21 09:54 ?2511次閱讀

    電容容量一樣大小不一樣能用嗎?

    來(lái)儲(chǔ)存電荷,從而形成電荷存儲(chǔ)器、信號(hào)濾波器、振蕩器等等。 但是,在實(shí)際應(yīng)用,我們常常會(huì)遇到電容容量大小相同但尺寸大小卻不一樣的情況。那么,電容容量大小相同但尺寸大小不同的電容器可以互相替代嗎?這個(gè)問(wèn)題似乎比較簡(jiǎn)單,但
    的頭像 發(fā)表于 09-22 16:30 ?6830次閱讀

    不同芯片的DMA(Direct Memory Access)是不一樣

    不同芯片的DMA(Direct Memory Access)是不一樣
    的頭像 發(fā)表于 10-16 09:14 ?1558次閱讀

    拼接屏白底顏色不一樣怎么解決?

    在拼接屏使用過(guò)程,有時(shí)會(huì)遇到白底顏色不一樣的問(wèn)題,這可能會(huì)影響到整個(gè)顯示畫面的質(zhì)量和效果。
    的頭像 發(fā)表于 11-24 10:22 ?840次閱讀