下面介绍我自己写重载二维下标实现方式,不一定最好,但比上面提到的方式要好。
struct Matrix4f
{
float m[4][4];
float * const operator[](const int i)
{
return m[i];
}
};Matrix4f m;
m[0][0] = 1.0f;
m[1][1] = 9.9f;
cout << m[0][0] << endl; // 1
cout << m[1][1] << endl; // 9.9template <typename T>
class Matrix
{
public:
Matrix(int row, int col)
:m_row(row), m_col(col), m_data(nullptr)
{
m_data = new T[m_row * m_col];
}
~Matrix()
{
if (m_data != nullptr)
{
delete[] m_data;
m_data = nullptr;
}
}
// 返回二维数组的第 k 行地址,注意加上 const 因为数组地址是不可变的
T * const operator[](int k)
{
return &m_data[k * m_col];
}
private:
int m_row;
int m_col;
T *m_data;
};
int arr1[3][4]; int arr2[3][4]; arr1[0] = arr2[0]; // ERROR!
测试赋值和取值操作:
Matrix<int> m2(3, 4); m2[0][0] = 2; m2[2][3] = 9; cout << m2[0][0] << endl; // 2 cout << m2[2][3] << endl; // 9
和一般的二维数组一样没有越界检查,所以越界操作也是可以的,但是尽量使用前检查索引是否越界,以免引发未知错误。
转载请注明出处:http://blog.csdn.net/xiaohui_hubei/article/details/21334141
【C++】重载二维数组下标 [ ][ ],布布扣,bubuko.com
原文:http://blog.csdn.net/xiaohui_hubei/article/details/21334141