程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 淺析多維數組的下標重載

淺析多維數組的下標重載

編輯:關於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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved