最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++超詳細(xì)講解操作符的重載

 更新時(shí)間:2022年06月01日 10:17:12   作者:清風(fēng)自在 流水潺潺  
C++預(yù)定義中的運(yùn)算符的操作對(duì)象只局限于基本的內(nèi)置數(shù)據(jù)類型,但是對(duì)于我們自定義的類型(類)是沒(méi)有辦法操作的。但是大多時(shí)候我們需要對(duì)我們定義的類型進(jìn)行類似的運(yùn)算,這個(gè)時(shí)候就需要我們對(duì)這么運(yùn)算符進(jìn)行重新定義,賦予其新的功能,以滿足自身的需求

一、需要解決的問(wèn)題

下面的復(fù)數(shù)解決方案是否可行?

下面看一下復(fù)數(shù)的加法操作:

#include <stdio.h>
class Complex 
{
    int a;
    int b;
public:
    Complex(int a = 0, int b = 0)
    {
        this->a = a;
        this->b = b;
    }
    int getA()
    {
        return a;
    }
    int getB()
    {
        return b;
    }
    friend Complex Add(const Complex& p1, const Complex& p2);
};
Complex Add(const Complex& p1, const Complex& p2)
{
    Complex ret;
    ret.a = p1.a + p2.a;
    ret.b = p1.b + p2.b;
    return ret;
}
int main()
{
    Complex c1(1, 2);
    Complex c2(3, 4);
    Complex c3 = Add(c1, c2); // c1 + c2
    printf("c3.a = %d, c3.b = %d\n", c3.getA(), c3.getB());
    return 0;
}

輸出結(jié)果如下:

思考

Add 函數(shù)可以解決 Complex 對(duì)象相加的問(wèn)題,但是 Complex 是現(xiàn)實(shí)世界中確實(shí)存在的復(fù)數(shù),并且復(fù)數(shù)在數(shù)學(xué)中的地位和普通的實(shí)數(shù)相同。

為什么不能讓+操作符也支持復(fù)數(shù)相加呢?這個(gè)就涉及到操作符的重載。

二、操作符重載

C++ 中的重載能夠擴(kuò)展操作符的功能

操作符的重載以函數(shù)的方式進(jìn)行

本質(zhì)

用特殊形式的函數(shù)擴(kuò)展操作符的功能

  • 通過(guò) operator 關(guān)鍵字可以定義特殊的函數(shù)
  • operator 的本質(zhì)是通過(guò)函數(shù)重載操作符

語(yǔ)法

下面來(lái)初探一下操作符重載:

#include <stdio.h>
class Complex 
{
    int a;
    int b;
public:
    Complex(int a = 0, int b = 0)
    {
        this->a = a;
        this->b = b;
    }
    int getA()
    {
        return a;
    }
    int getB()
    {
        return b;
    }
    friend Complex operator + (const Complex& p1, const Complex& p2);
};
Complex operator + (const Complex& p1, const Complex& p2)
{
    Complex ret;
    ret.a = p1.a + p2.a;
    ret.b = p1.b + p2.b;
    return ret;
}
int main()
{
    Complex c1(1, 2);
    Complex c2(3, 4);
    Complex c3 = c1 + c2; // operator + (c1, c2)
    printf("c3.a = %d, c3.b = %d\n", c3.getA(), c3.getB());
    return 0;
}

輸出結(jié)果如下:

可以將操作符重載函數(shù)定義為類的成員函數(shù)

  • 比全局操作符重載函數(shù)少—個(gè)參數(shù)(左操作數(shù))
  • 不需要依賴友元就可以完成操作符重載
  • 編譯器優(yōu)先在成員函數(shù)中尋找操作符重載函數(shù)

下面來(lái)實(shí)現(xiàn)在成員函數(shù)中重載操作符:

#include <stdio.h>
class Complex 
{
    int a;
    int b;
public:
    Complex(int a = 0, int b = 0)
    {
        this->a = a;
        this->b = b;
    }
    int getA()
    {
        return a;
    }
    int getB()
    {
        return b;
    }
    Complex operator + (const Complex& p)
    {
        Complex ret;
        printf("Complex operator + (const Complex& p)\n");
        ret.a = this->a + p.a;
        ret.b = this->b + p.b;
        return ret;
    }
    friend Complex operator + (const Complex& p1, const Complex& p2);
};
Complex operator + (const Complex& p1, const Complex& p2)
{
    Complex ret;
    printf("Complex operator + (const Complex& p1, const Complex& p2)\n");
    ret.a = p1.a + p2.a;
    ret.b = p1.b + p2.b;
    return ret;
}
int main()
{
    Complex c1(1, 2);
    Complex c2(3, 4);
    Complex c3 = c1 + c2; // c1.operator + (c2)
    printf("c3.a = %d, c3.b = %d\n", c3.getA(), c3.getB());
    return 0;
}

輸出結(jié)果如下:

這個(gè)說(shuō)明編譯器優(yōu)先在成員函數(shù)中尋找操作符重載函數(shù)

故上述代碼可以直接寫成:

#include <stdio.h>
class Complex 
{
    int a;
    int b;
public:
    Complex(int a = 0, int b = 0)
    {
        this->a = a;
        this->b = b;
    }
    int getA()
    {
        return a;
    }
    int getB()
    {
        return b;
    }
    Complex operator + (const Complex& p)
    {
        Complex ret;
        ret.a = this->a + p.a;
        ret.b = this->b + p.b;
        return ret;
    }
};
int main()
{
    Complex c1(1, 2);
    Complex c2(3, 4);
    Complex c3 = c1 + c2; // c1.operator + (c2)
    printf("c3.a = %d, c3.b = %d\n", c3.getA(), c3.getB());
    return 0;
}

三、小結(jié)

  • 操作符重載是 C++ 的強(qiáng)大特性之一
  • 操作符重載的本質(zhì)是通過(guò)函數(shù)擴(kuò)展操作符的功能
  • operator 關(guān)鍵字是實(shí)現(xiàn)操作符重載的關(guān)鍵
  • 操作符重載遵循相同的函數(shù)重載規(guī)則
  • 全局函數(shù)和成員函數(shù)都可以實(shí)現(xiàn)對(duì)操作符的重載

到此這篇關(guān)于C++超詳細(xì)講解操作符的重載的文章就介紹到這了,更多相關(guān)C++操作符重載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言中回調(diào)函數(shù)的使用詳情

    C語(yǔ)言中回調(diào)函數(shù)的使用詳情

    這篇文章主要介紹了C語(yǔ)言中回調(diào)函數(shù)的使用詳情,閱讀下文我們將學(xué)習(xí)到架構(gòu)的核心理念和需、回調(diào)函數(shù)的作用、回調(diào)函數(shù)的程序編寫等內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • C++超詳細(xì)分析講解內(nèi)聯(lián)函數(shù)

    C++超詳細(xì)分析講解內(nèi)聯(lián)函數(shù)

    為了消除函數(shù)調(diào)用的時(shí)空開(kāi)銷,C++ 提供一種提高效率的方法,即在編譯時(shí)將函數(shù)調(diào)用處用函數(shù)體替換,類似于C語(yǔ)言中的宏展開(kāi)。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱為內(nèi)聯(lián)函數(shù)(Inline Function),又稱內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)
    2022-06-06
  • C++語(yǔ)言基礎(chǔ) this和static關(guān)鍵字

    C++語(yǔ)言基礎(chǔ) this和static關(guān)鍵字

    這篇文章主要介紹了C++語(yǔ)言基礎(chǔ) this和static關(guān)鍵字,需要的朋友可以參考下
    2020-01-01
  • win10+VS2017+Cuda10.0環(huán)境配置詳解

    win10+VS2017+Cuda10.0環(huán)境配置詳解

    這篇文章主要介紹了win10+VS2017+Cuda10.0環(huán)境配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • C++實(shí)現(xiàn)LeetCode(93.復(fù)原IP地址)

    C++實(shí)現(xiàn)LeetCode(93.復(fù)原IP地址)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(93.復(fù)原IP地址),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言結(jié)構(gòu)體的全方面解讀

    C語(yǔ)言結(jié)構(gòu)體的全方面解讀

    C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng)
    2021-10-10
  • Qt兩種定時(shí)器使用實(shí)現(xiàn)方式

    Qt兩種定時(shí)器使用實(shí)現(xiàn)方式

    這篇文章主要給大家介紹了關(guān)于Qt兩種定時(shí)器使用實(shí)現(xiàn)方式的相關(guān)資料,Qt中的定時(shí)器類是QTimer,QTimer不是一個(gè)可見(jiàn)的界面組件,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 深入解析C++編程中對(duì)設(shè)計(jì)模式中的策略模式的運(yùn)用

    深入解析C++編程中對(duì)設(shè)計(jì)模式中的策略模式的運(yùn)用

    這篇文章主要介紹了C++編程中對(duì)設(shè)計(jì)模式中的策略模式的運(yùn)用,需要的朋友可以參考下
    2016-03-03
  • C++中string使用+號(hào)與int拼接方式

    C++中string使用+號(hào)與int拼接方式

    這篇文章主要介紹了C++中string使用+號(hào)與int拼接方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++基礎(chǔ)入門教程(九):函數(shù)指針之回調(diào)

    C++基礎(chǔ)入門教程(九):函數(shù)指針之回調(diào)

    這篇文章主要介紹了C++基礎(chǔ)入門教程(九):函數(shù)指針之回調(diào),本文講解了函數(shù)的地址、聲明函數(shù)指針、歷史原因、typedef挽救復(fù)雜的函數(shù)指針等內(nèi)容,需要的朋友可以參考下
    2014-11-11

最新評(píng)論

泾阳县| 道孚县| 泗洪县| 工布江达县| 页游| 井冈山市| 黎平县| 新宁县| 汨罗市| 岢岚县| 津市市| 万安县| 本溪市| 夏邑县| 揭阳市| 夏津县| 忻州市| 德阳市| 开平市| 钦州市| 平果县| 肃南| 临沭县| 高邮市| 和林格尔县| 东乌珠穆沁旗| 都安| 余庆县| 宁河县| 专栏| 景洪市| 和林格尔县| 台湾省| 成都市| 阳高县| 丰顺县| 化州市| 板桥市| 铁力市| 揭阳市| 天门市|