服务器之家

服务器之家 > 正文

浅析多维数组的下标重载

时间:2020-12-29 15:32     来源/作者:C语言教程网

今天看到有人问,在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;
}

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址 2020-08-12
返回顶部