C++中爲類重載下標操作符(2-2)

2.2 常量對象

當定義myClass類的常量對象時

const myClass c_my_class(5);

“2.1 返回值是引用類型”中提到的重載下標操作符[]的返回值是引用類型,因此當有如下代碼時不報錯。

int i = c_my_class[0];

其報錯信息爲“error C2678: 二進制“[”: 沒有找到接受“const myClass”類型的左操作數的運算符(或沒有可接受的轉換)”。此時需要再次重載下標操作符[],使其返回類型爲const int&。

const int& operator[](size_t n) const

{
  return arr[n];
}

也就是說,如果一個類包含下標運算符,則它通常會定義兩個版本:一個返回普通引用,另一個類的常量成員並且返回常量引用。

2.2 容器是二維數組

當容器類要表示二維數組時,需要將myClass類的成員函數arr聲明爲指針的指針。

int** arr;

myClass類的構造函數修改爲

myClass(int n, int m)

{
  arr = new int*[n];
  for (int i = 0; i < n; ++i)
  {
     arr[i] = new int[m];
  }
}

重載的下標操作符[]的返回值變爲int*&,代碼如下

int*& operator[](size_t n)

{
  return arr[n];
}

此時,可以通過以下代碼訪問二維數組

myClass my_class(3, 2);
my_class[0][0] = 1;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章