淺析多維數(shù)組的下標(biāo)重載
今天看到有人問,在2維或者多維數(shù)組的情況下怎樣重載像[][]這樣的操作符號。
其實(shí)思路也不難啊,只不過是重載2個[]符號而已,并且2個[]的功能各不一樣。
第一個[]應(yīng)該定位行.
最后一個[]應(yīng)該返回最終數(shù)據(jù)的引用。
貼一下實(shí)現(xiàn)基本功能的代碼吧,像越界檢測,及其他功能就沒寫了,只要體現(xiàn)了思路,其他的功能好加。
#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++) //初始化數(shù)據(jù),默認(rèn)為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;
}
相關(guān)文章
Qt基于TCP實(shí)現(xiàn)客戶端與服務(wù)端的連接
這篇文章主要為大家詳細(xì)介紹了Qt基于TCP實(shí)現(xiàn)客戶端與服務(wù)端的連接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08C++核心編程之占位參數(shù)和默認(rèn)參數(shù)
這篇文章主要介紹了C++核心編程之占位參數(shù)和默認(rèn)參數(shù),c++中函數(shù)的形參列表中的形參是可以有默認(rèn)值的,函數(shù)的形參列表里可以有占位參數(shù),用來占位,調(diào)用函數(shù)時必須填補(bǔ)位置。下面更多相關(guān)內(nèi)容的詳細(xì)介紹,需要的小伙伴可以參考一下2022-03-03詳解C++語言中的加法運(yùn)算符與賦值運(yùn)算符的用法
這篇文章主要介紹了C++語言中的加法運(yùn)算符與賦值運(yùn)算符的用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-01-01C++ 17標(biāo)準(zhǔn)正式發(fā)布! 更簡單地編寫和維護(hù)代碼
C++ 17 標(biāo)準(zhǔn)正式發(fā)布:終于能更簡單地編寫和維護(hù)代碼了!本文為大家介紹了C ++ 17 主要特性,感興趣的小伙伴們可以參考一下2017-12-12C語言實(shí)現(xiàn)CRC校驗(yàn)算法的示例詳解
CRC(Cyclic Redundancy Check,循環(huán)冗余校驗(yàn))是一種常用的錯誤檢測技術(shù),用于驗(yàn)證數(shù)據(jù)在傳輸或存儲過程中是否發(fā)生了錯誤,本文主要介紹了C語言如何實(shí)現(xiàn)CRC校驗(yàn)算法,需要的可以參考一下2023-08-08