1. 程式人生 > >c++學習筆記 -- 下標運算子

c++學習筆記 -- 下標運算子

宣告 程式碼出處:http://www.weixueyuan.net/view/6384.html

運算子過載格式

返回型別 & operator[] (引數)

const 返回型別 & operator[] (引數)

使用第一種宣告方式,操作符過載函式不僅可以訪問物件,同時還可以修改物件

使用第二種宣告方式,則操作符過載函式只能訪問而不能修改物件。

通過下標去訪問陣列中的元素並不具有檢查邊界溢位功能,我們可以過載下標操作符使之具有相應的功能


int&operator[](int);

int& Array::operator[](int i)
{
    if(i < 0 || i >= length)
        throw string("out of bounds");
    return num[i];
}
constint&operator[](int)const;

const int & Array::operator[](int i) const
{
    if(i < 0 || i >= length)
        throw string("out of bounds");
    return num[i];
}

類中我們過載了下標操作符,使之具備檢測下標溢位的功能。在類中為了方便我們使用了string類

是第一個下標操作符過載函式最後面不帶有const,加上const意味著該成員函式是常成員函式,如果第一個函式後面也加上了const,則兩個函式僅有返回值不相同,這個不足以用於區分函式


一個是可以修改類物件,下面一個則只可以訪問物件而不能修改物件

“arr[5]”其實可以理解為:
    arr.operator[]( 5 )

下面一種下標操作符過載函式,我們不能修改物件,也就是說語句“arr[5] = 7;”語句是無效的

,但是它依然可以用於訪問物件,因此“int var = arr[3];”語句仍然有效

沒有定義const版本的,上面的例子也是可以正確執行的,但是非const成員函式不能處理const物件,因此通常我們在設計程式時,會同時提供兩種版本的操作符過載函式。