吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

汽車電子技術 ? 來源:程序喵大人 ? 作者:程序喵 ? 2023-02-21 14:02 ? 次閱讀

關于什么是重載想必大家都知道,無非就是參數個數不同,參數類型不同可以重載,這里我就不過多介紹啦。

這里想分享C++中一個不一樣的重載,即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();
}

這段代碼會輸出什么?

輸出的是這樣:

non const
const

不知道大家平時有沒有關注過這種用法,沒關注過可以繼續向下看哈。

圖片

從上面的輸出結果我們也可以看到,const修飾的對象調用的是使用const修飾的方法,非const對象調用的是非const的方法。

然而想必大家都知道對象調用的原理:

看下面的這段代碼:

A a;
a.func();

其實到底層,函數可能會變成這樣:

func(A* a);

函數是在代碼段,對象是在數據段,調用不同對象的函數,其實只不過是同一個函數,傳遞了不同的數據參數而已。

上面的是把對象的this指針傳進去。

再回到上面的代碼:

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

所以得出結論:

不只是參數類型和個數不同會產生重載,const修飾的參數也會有重載。

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73854
  • CONST
    +關注

    關注

    0

    文章

    45

    瀏覽量

    8187
  • 重載
    +關注

    關注

    0

    文章

    8

    瀏覽量

    2775
收藏 人收藏

    評論

    相關推薦

    C++的結構和類

    C++ 有結構,就像 C 一樣,因為它們是不一樣的。C++ 有類,它們與結構非常相似。本文解開這些語言元素的細節。
    發表于 07-18 17:37 ?840次閱讀

    線損校準,為啥不一樣

    線損校準,為啥不一樣,今天測試時發現,校準是,信號源頻率不一樣,線損差別很大,有1dB 多!!!
    發表于 06-05 13:58

    數據類型不一樣和接口 怎么解決

    要怎么解決接口和產生的數據類型不一樣的問題,然后利用MYRIO的模擬輸出通道接到示波器里面為什么沒有波形啊,數據類型應該是不一樣,要怎么解決這個問題呢?
    發表于 05-09 01:00

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

    一模一樣的啊,還有都能編譯通過和下載,不知道這是什么原因,還有就是我對比發現這兩個工程的輸出文件的有差別,是不是keil沒有設置好導致輸出文件不一樣,進而導致程序運行結果不一樣啊,求高手指點
    發表于 03-07 08:26

    程序編輯器結果不一樣

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

    為什么我的淚滴不一樣

    我的淚滴怎么和網上的不一樣??
    發表于 03-13 15:23

    為什么c語言中a和b的值不一樣c和d的值不一樣

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

    請問C++ primer和C++primer plus這兩本書有什么不一樣

    如題這兩本書有什么不一樣嗎?望讀過的大神們說說啊?給小弟提個意見,該選哪本好啊?ps:看了《指針和C》,但是C++基礎點都沒有。
    發表于 10-31 23:13

    c++c語言之間有什么區別

    C++是在C語言的基礎上發展來的,但是并不是C++C語言高級,兩者的編程思想不一樣,應用的領域也不一樣
    發表于 12-11 10:17 ?3.1w次閱讀

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

    氣密性測試與氣壓測試有什么不一樣的呢?
    發表于 12-27 15:38 ?4611次閱讀

    C++函數重載的使用

    重載,顧名思義從字面上理解就是重復裝載,打個不恰當的比方,你可以用個籃子裝蔬菜,也可以裝水果或者其它,使用的是同個籃子,但是可以用籃子重復裝載的東西
    的頭像 發表于 04-15 11:22 ?675次閱讀

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

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

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

    來儲存電荷,從而形成電荷存儲器、信號濾波器、振蕩器等等。 但是,在實際應用,我們常常會遇到電容容量大小相同但尺寸大小卻不一樣的情況。那么,電容容量大小相同但尺寸大小不同的電容器可以互相替代嗎?這個問題似乎比較簡單,但
    的頭像 發表于 09-22 16:30 ?7303次閱讀

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

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

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

    在拼接屏使用過程,有時會遇到白底顏色不一樣的問題,這可能會影響到整個顯示畫面的質量和效果。
    的頭像 發表于 11-24 10:22 ?908次閱讀
    金域百家乐娱乐城| 百家乐平注赢钱法| 长沙百家乐的玩法技巧和规则 | 百家乐开户导航| 名仕国际棋牌官方网| 百家乐官网二人视频麻将| 好运来百家乐官网的玩法技巧和规则| 百家乐台布哪里有卖| 娱乐城彩金| 百家乐官网香港六合彩 | 大发888娱乐官网| 解析百家乐官网投注法| 凯斯网百家乐官网的玩法技巧和规则 | 大发888为什么这么卡| 网上百家乐官网投注法| 做生意戴什么珠子招财| 威尼斯人娱乐场钓鱼网站| 突泉县| 成都百家乐官网的玩法技巧和规则 | 巴厘岛百家乐官网的玩法技巧和规则| 华泰百家乐的玩法技巧和规则 | 永利百家乐官网的玩法技巧和规则| 博彩百家乐带连线走势图| 霍山县| 百家乐官网太阳城怎么样| 百家乐网站新全讯网| 博彩网站排名| 百家乐官网路单怎样| 大中华百家乐的玩法技巧和规则| 万全县| 网上赌百家乐被抓应该怎么处理| 龙虎斗| 巴宝莉百家乐官网的玩法技巧和规则 | 二八杠认牌绝技| 青鹏百家乐官网游戏币| 肯博百家乐的玩法技巧和规则 | 属马做生意坐向| 棋牌娱乐城注册送58| 新葡京百家乐官网的玩法技巧和规则 | 晋中市| 上海玩百家乐算不算违法|