欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++下標運算符詳解

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

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

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

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

使用第一種聲明方式,[ ]不僅可以訪問元素,還可以修改元素。使用第二種聲明方式,[ ]只能訪問而不能修改元素。在實際開發(fā)中,我們應該同時提供以上兩種形式,這樣做是為了適應 const 對象,因為通過 const 對象只能調用 const 成員函數(shù),如果不提供第二種形式,那么將無法訪問 const 對象的任何元素。下面我們通過一個具體的例子來演示如何重載[ ]。我們知道,有些較老的編譯器不支持變長數(shù)組,例如 VC6.0、VS2010 等,這有時候會給編程帶來不便,下面我們通過自定義的 Array 類來實現(xiàn)變長數(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ù)組長度
        int *m_p;  //指向數(shù)組內存的指針
    };
    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;  //訪問最后一個元素
        return 0;
    }

運行結果:

5↙

0, 5, 10, 15, 20

33685536

重載[ ]運算符以后,表達式arr[i]會被轉換為:

arr.operator ;

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

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

相關文章

  • c++11 符號修飾與函數(shù)簽名、函數(shù)指針、匿名函數(shù)、仿函數(shù)、std::function與std::bind

    c++11 符號修飾與函數(shù)簽名、函數(shù)指針、匿名函數(shù)、仿函數(shù)、std::function與std::bind

    這篇文章主要介紹了c++11 符號修飾與函數(shù)簽名、函數(shù)指針、匿名函數(shù)、仿函數(shù)、std::function與std::bind,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 使用用C++做一顆會跳動的愛心實例代碼

    使用用C++做一顆會跳動的愛心實例代碼

    大家好,本篇文章主要講的是使用用C++做一顆會跳動的愛心實例代碼,感興趣的同學趕快來看一看吧,歡迎借鑒學習C++做一顆會跳動的愛心實例代碼
    2021-12-12
  • C語言算法練習之佩奇存錢方案

    C語言算法練習之佩奇存錢方案

    這篇文章主要該大家分享C語言算法佩奇存錢的練習,文章主要通過描述佩奇存錢的問題然后確定程序框架將結果運算出來,下面來看詳細內容吧,需要的朋友可以參考一下
    2022-04-04
  • C語言實現(xiàn)簡單的井字棋游戲

    C語言實現(xiàn)簡單的井字棋游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單的井字棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Linux頁面置換算法的C語言實現(xiàn)

    Linux頁面置換算法的C語言實現(xiàn)

    這篇文章主要為大家詳細介紹了Linux頁面置換算法的C語言實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++ GDI實現(xiàn)圖片格式轉換

    C++ GDI實現(xiàn)圖片格式轉換

    GDI+(Graphics Device Interface Plus)是一種用于圖形繪制和圖像處理的應用程序編程接口(API),在Windows平臺上廣泛使用,本文就來介紹一下如何使用GDI實現(xiàn)圖片格式轉換吧
    2023-12-12
  • C語言實踐設計開發(fā)飛機游戲

    C語言實踐設計開發(fā)飛機游戲

    飛機大戰(zhàn)想必是很多人童年時期的經(jīng)典游戲,我們依舊能記得抱個老人機娛樂的場景,下面這篇文章主要給大家介紹了關于如何利用C語言寫一個簡單的飛機大戰(zhàn)小游戲的相關資料,需要的朋友可以參考下
    2022-02-02
  • Qt基于TCP實現(xiàn)客戶端與服務端的連接

    Qt基于TCP實現(xiàn)客戶端與服務端的連接

    這篇文章主要為大家詳細介紹了Qt基于TCP實現(xiàn)客戶端與服務端的連接,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • c++中的字節(jié)序與符號位的問題

    c++中的字節(jié)序與符號位的問題

    這篇文章主要介紹了c++中的字節(jié)序與符號位的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 關于C++中的友元函數(shù)的一些總結

    關于C++中的友元函數(shù)的一些總結

    以下是對C++中的友元函數(shù)進行了詳細的總結介紹,需要的朋友可以過來參考下
    2013-09-09

最新評論