日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++重载下标运算符

發布時間:2025/3/12 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++重载下标运算符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

或者:

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

使用第一種聲明方式,[ ]不僅可以訪問元素,還可以修改元素。使用第二種聲明方式,[ ]只能訪問而不能修改元素。在實際開發中,我們應該同時提供以上兩種形式,這樣做是為了適應 const 對象,因為通過 const 對象只能調用 const 成員函數,如果不提供第二種形式,那么將無法訪問 const 對象的任何元素。

示例重載[],利用自定義的 Array 類來實現變長數組。

#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; //數組長度int *m_p; //指向數組內存的指針 };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; }

運行結果:

50, 5, 10, 15, 20 33685536

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

arr.operator[ ](i);

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

總結

以上是生活随笔為你收集整理的C++重载下标运算符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。