浅析多维数组的下标重载_C语言教程-查字典教程网
浅析多维数组的下标重载
浅析多维数组的下标重载
发布时间:2016-12-28 来源:查字典编辑
摘要:今天看到有人问,在2维或者多维数组的情况下怎样重载像[][]这样的操作符号。其实思路也不难啊,只不过是重载2个[]符号而已,并且2个[]的功...

今天看到有人问,在2维或者多维数组的情况下怎样重载像[][]这样的操作符号。

其实思路也不难啊,只不过是重载2个[]符号而已,并且2个[]的功能各不一样。

第一个[]应该定位行.

最后一个[]应该返回最终数据的引用。

贴一下实现基本功能的代码吧,像越界检测,及其他功能就没写了,只要体现了思路,其他的功能好加。

复制代码 代码如下:

#include <iostream>

#include <string>

using namespace std;

template <class T> class arr;

template <class T> class arrBody

{

private:

friend class arr<T>;

T* data;

int row,col,current_row;

arrBody(int r,int c,T d):row(r),col(c)

{

data=new T[r*c];

current_row=-1;

for(int k=0;k<r*c;k++) //初始化数据,默认为0

data[k]=d;

}

public:

T& operator[](int j) //重载第2个[]号

{

if(j>=0&&j<col)

return data[current_row*col+j];

}

~arrBody(){delete[]data;} }; template <class T> class arr

{

private:

arrBody<T> tBody;

public:

arrBody<T> &operator[](int i) //重载第一个[]号

{

if(i>=0&&i<tBody.row)

tBody.current_row=i;

return tBody;

}

arr(int i,int j,T d=0):tBody(i,j,d) {}

};

void main()

{

arr<int> a(10,20);

arr<double> b(5,5);

cout<<a[5][5]<<endl;

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C语言学习
    热门C语言学习
    编程开发子分类