淺析多維數組的下標重載。本站提示廣大學習愛好者:(淺析多維數組的下標重載)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析多維數組的下標重載正文
明天看到有人問,在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;
}