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;