浅析多维数组的下标重载
今天看到有人问,在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语言
下一篇:iostream与iostream.h的区别详细解析
本文标题:浅析多维数组的下标重载
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/4125.html
您可能感兴趣的文章
- 01-10求子数组最大和的解决方法详解
- 01-10如何寻找数组中的第二大数
- 01-10深入线性时间复杂度求数组中第K大数的方法详解
- 01-10数组中求第K大数的实现方法
- 01-10深入理解数组指针与指针数组的区别
- 01-10c语言字符数组与字符串的使用详解
- 01-10解析sizeof, strlen, 指针以及数组作为函数参数的应用
- 01-10c语言中用字符串数组显示菜单的解决方法
- 01-10探讨C++中数组名与指针的用法比较分析
- 01-10求数组中最长递增子序列的解决方法
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-11ajax实现页面的局部加载
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 04-02jquery与jsp,用jquery
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10SublimeText编译C开发环境设置
- 01-10C#中split用法实例总结
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10delphi制作wav文件的方法
- 08-05DEDE织梦data目录下的sessions文件夹有什