[][]重载问题第二弹
按照more effective书上的原理写了以下的复合类想实现[][]运算符重载
经过改进,依然无法调试通过 ,搞了一天, 无果,只得再请高人继续指教
// 'array2d.h'
#ifndef ARRAY2D_H
#define ARRAY2D_H
#include <iostream.h>
template<class T>
class Array2D {
public:
class Array1D {
public:
Array1D(const Array2D&); // Translate 2D array into 1D array
~Array1D();
const T &operator[](int); // return the element
private:
T *Ptr;
};
Array2D(int = 10, int = 10);
~Array2D();
Array1D operator[](int); // return 1D array with correspondence row
private:
T *arrayPtr;
int rowSize;
int columnSize;
};
template<class T>
Array2D<T>::Array1D::Array1D(const Array2D<T> ©)
{
Ptr = new T[copy.columnSize];
// Assign the special row elements to 1D array
for (int i = 0; i < copy.columnSize; i++) {
*(Ptr+i) = *(copy.arrayPtr+i);
}
}
template<class T>
Array2D<T>::Array1D::~Array1D()
{
delete [] Ptr;
}
template<class T>
Array2D<T>::Array2D(int rSize, int cSize)
{
rowSize = rSize > 0 ? rSize : 10;
columnSize = cSize > 0 ? cSize : 10;
arrayPtr = new T[rowSize * columnSize];
for (int i = 0; i < rowSize * columnSize; i++) {
*(arrayPtr+i) = 0;
}
}
template<class T>
Array2D<T>::~Array2D()
{
delete [] arrayPtr;
}
template<class T>
Array2D<T>::Array1D Array2D<T>::operator[](int sub)
{
arrayPtr += sub * columnSize; // Let the arrayPtr point to the
// correspondence row
return *this;
}
template<class T>
const T& Array2D<T>::Array1D::operator[](int sub)
{
return *(Ptr+sub);
}
#endif