织梦CMS - 轻松建站从此开始!

罗索

关于多维数组的下标重载

落鹤生 发布于 2011-03-05 17:04 点击:次 
今天看到有人问,在2维或者多维数组的情况下怎样重载像[][]这样的操作符号。其实思路也不难啊,只不过是重载2个[]符号而已,并且2个[]的功能各不一样。
TAG:

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

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

第一个[]应该定位行.

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

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

  1. #include <iostream> 
  2. #include <string> 
  3.  
  4. using namespace std; 
  5.  
  6. template <class T> class arr; 
  7. template <class T> class arrBody 
  8.     private
  9.     friend class arr<T>; 
  10.     T* data; 
  11.     int row,col,current_row; 
  12.     arrBody(int r,int c,T d):row(r),col(c) 
  13.     { 
  14.         data=new T[r*c]; 
  15.         current_row=-1; 
  16.         for(int k=0;k<r*c;k++) //初始化数据,默认为0 
  17.             data[k]=d; 
  18.     } 
  19.     public
  20.         T&   operator[](int  j) //重载第2个[]号 
  21.         { 
  22.             if(j>=0&&j<col) 
  23.                 return data[current_row*col+j]; 
  24.         } 
  25.         ~arrBody(){delete[]data;} }; template <class  T>  class arr   
  26. {   
  27. private
  28.     arrBody<T> tBody;   
  29. public:   
  30.     arrBody<T>  &operator[](int i) //重载第一个[]号 
  31.     { 
  32.         if(i>=0&&i<tBody.row) 
  33.             tBody.current_row=i; 
  34.         return tBody; 
  35.     } 
  36.     arr(int  i,int  j,T d=0):tBody(i,j,d) {}   
  37. }; 
  38.  
  39.  
  40. void main() 
  41.     arr<int> a(10,20); 
  42.     arr<double> b(5,5); 
  43.     cout<<a[5][5]<<endl; 

 

(hairetz)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201103/11018.html]
本文出处:CSDN博客 作者:hairetz
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容