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

C++下標(biāo)運(yùn)算符詳解

 更新時(shí)間:2023年09月15日 09:40:55   作者:向陽逐夢(mèng)  
C語言中的下標(biāo)運(yùn)算符用于訪問數(shù)組或指針變量中的元素,它使用方括號(hào) [] 來表示,并在方括號(hào)內(nèi)指定元素的索引位置,本文給大家詳細(xì)的講解一下C++的下標(biāo)運(yùn)算符,需要的朋友可以參考下

C++ 規(guī)定,下標(biāo)運(yùn)算符[ ]必須以成員函數(shù)的形式進(jìn)行重載。該重載函數(shù)在類中的聲明格式如下:

返回值類型 & operator[ ] (參數(shù));

const 返回值類型 & operator[ ] (參數(shù)) const;

使用第一種聲明方式,[ ]不僅可以訪問元素,還可以修改元素。使用第二種聲明方式,[ ]只能訪問而不能修改元素。在實(shí)際開發(fā)中,我們應(yīng)該同時(shí)提供以上兩種形式,這樣做是為了適應(yīng) const 對(duì)象,因?yàn)橥ㄟ^ const 對(duì)象只能調(diào)用 const 成員函數(shù),如果不提供第二種形式,那么將無法訪問 const 對(duì)象的任何元素。下面我們通過一個(gè)具體的例子來演示如何重載[ ]。我們知道,有些較老的編譯器不支持變長(zhǎng)數(shù)組,例如 VC6.0、VS2010 等,這有時(shí)候會(huì)給編程帶來不便,下面我們通過自定義的 Array 類來實(shí)現(xiàn)變長(zhǎng)數(shù)組。

    #include <iostream>
    using namespace std;
    class Array{
    public:
        Array(int length = 0);
        ~Array();
    public:
        int & operator[](int i);
        const int & operator[](int i) const;
    public:
        int length() const { return m_length; }
        void display() const;
    private:
        int m_length;  //數(shù)組長(zhǎng)度
        int *m_p;  //指向數(shù)組內(nèi)存的指針
    };
    Array::Array(int length): m_length(length){
        if(length == 0){
            m_p = NULL;
        }else{
            m_p = new int[length];
        }
    }
    Array::~Array(){
        delete[] m_p;
    }
    int& Array::operator[](int i){
        return m_p[i];
    }
    const int & Array::operator[](int i) const{
        return m_p[i];
    }
    void Array::display() const{
        for(int i = 0; i < m_length; i++){
            if(i == m_length - 1){
                cout<<m_p[i]<<endl;
            }else{
                cout<<m_p[i]<<", ";
            }
        }
    }
    int main(){
        int n;
        cin>>n;
        Array A(n);
        for(int i = 0, len = A.length(); i < len; i++){
            A[i] = i * 5;
        }
        A.display();
        const Array B(n);
        cout<<B[n-1]<<endl;  //訪問最后一個(gè)元素
        return 0;
    }

運(yùn)行結(jié)果:

5↙

0, 5, 10, 15, 20

33685536

重載[ ]運(yùn)算符以后,表達(dá)式arr[i]會(huì)被轉(zhuǎn)換為:

arr.operator ;

需要說明的是,B 是 const 對(duì)象,如果 Array 類沒有提供 const 版本的operator[ ],那么第 60 行代碼將報(bào)錯(cuò)。雖然第 60 行代碼只是讀取對(duì)象的數(shù)據(jù),并沒有試圖修改對(duì)象,但是它調(diào)用了非 const 版本的operator[ ],編譯器不管實(shí)際上有沒有修改對(duì)象,只要是調(diào)用了非 const 的成員函數(shù),編譯器就認(rèn)為會(huì)修改對(duì)象(至少有這種風(fēng)險(xiǎn))。

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

相關(guān)文章

  • C/C++內(nèi)存管理基礎(chǔ)與面試

    C/C++內(nèi)存管理基礎(chǔ)與面試

    本章主要介紹C語言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語言的內(nèi)存管理方式(new?delete對(duì)比?malloc?free),感興趣的朋友來看看吧
    2022-07-07
  • C語言推箱子游戲?qū)崿F(xiàn)代碼

    C語言推箱子游戲?qū)崿F(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C語言推箱子游戲?qū)崿F(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C語言雙指針多方法旋轉(zhuǎn)數(shù)組解題LeetCode

    C語言雙指針多方法旋轉(zhuǎn)數(shù)組解題LeetCode

    這篇文章主要為大家介紹了C語言雙指針使用多方法旋轉(zhuǎn)數(shù)組題解LeetCode,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • C++通過SQLiteSDK增刪改查的實(shí)現(xiàn)示例

    C++通過SQLiteSDK增刪改查的實(shí)現(xiàn)示例

    SQLite是一種輕量級(jí)的嵌入式數(shù)據(jù)庫,可以利用SQLiteSDK執(zhí)行數(shù)據(jù)庫的增刪改查操作,本文主要介紹了C++通過SQLiteSDK增刪改查,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • C++實(shí)現(xiàn)鼠標(biāo)控制的黑框象棋

    C++實(shí)現(xiàn)鼠標(biāo)控制的黑框象棋

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)鼠標(biāo)控制的黑框象棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Windows下Qt打包自動(dòng)尋找依賴的DLL

    Windows下Qt打包自動(dòng)尋找依賴的DLL

    本文介紹了兩種在Windows下使用Qt打包應(yīng)用程序并自動(dòng)尋找依賴DLL的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • C++基于控制臺(tái)實(shí)現(xiàn)的貪吃蛇小游戲

    C++基于控制臺(tái)實(shí)現(xiàn)的貪吃蛇小游戲

    這篇文章主要介紹了C++基于控制臺(tái)實(shí)現(xiàn)的貪吃蛇小游戲,實(shí)例分析了貪吃蛇游戲的原理與C++實(shí)現(xiàn)技巧,是非常經(jīng)典的游戲算法,需要的朋友可以參考下
    2015-04-04
  • C++中構(gòu)造函數(shù)的初始化順序說明

    C++中構(gòu)造函數(shù)的初始化順序說明

    C++構(gòu)造函數(shù)調(diào)用遵循基類→成員對(duì)象→派生類順序,虛函數(shù)在構(gòu)造中靜態(tài)綁定,完成后動(dòng)態(tài)綁定,拷貝構(gòu)造在初始化、賦值及容器操作時(shí)調(diào)用,RVO優(yōu)化可能避免拷貝,虛函數(shù)重寫自子類起生效,不追溯基類
    2025-07-07
  • C++實(shí)現(xiàn)高并發(fā)異步定時(shí)器

    C++實(shí)現(xiàn)高并發(fā)異步定時(shí)器

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)高并發(fā)異步定時(shí)器,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • 下標(biāo)操作符重載模擬多維數(shù)組詳解

    下標(biāo)操作符重載模擬多維數(shù)組詳解

    雖然不能直接實(shí)現(xiàn)一對(duì)下標(biāo)操作符重載,但是我們可以間接模擬。思路是這樣的,先通過單下標(biāo)操作返回一個(gè)具有下標(biāo)操作能力的左值,對(duì)左值進(jìn)行下標(biāo)操作,兩個(gè)下標(biāo)操作表達(dá)式聯(lián)立就實(shí)現(xiàn)了雙下標(biāo)操作
    2013-09-09

最新評(píng)論

万荣县| 玉环县| 灵丘县| 微山县| 诏安县| 巨野县| 洛南县| 亳州市| 法库县| 黄冈市| 永安市| 开江县| 建平县| 贺州市| 云安县| 宾阳县| 丽江市| 繁昌县| 资中县| 醴陵市| 柘荣县| 秀山| 资兴市| 改则县| 米易县| 惠水县| 胶州市| 宜州市| 邳州市| 文化| 黄龙县| 新昌县| 太谷县| 涿州市| 璧山县| 襄汾县| 济南市| 云龙县| 杨浦区| 湘阴县| 玉门市|