[][]重载问题第二弹

ghostzf ghostzf 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
按照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

...全文
评论 21
收藏 已收藏
分享
返回顶部
ghostzf
C++ 语言 65,214 成员 250,514 内容