2015-02-20 7 views
6

मैं एक साधारण वर्ग, जिसका सूचकांक ऑपरेटर मैं अतिभारित किया है:सी ++ अतिभारित सूचकांक करने के लिए तीर (इस -> [])

class dgrid{ 
    double* data; // 1D Array holds 2D data in row-major format 
    public: 
    const int nx; 
    const int ny; 
    double* operator[] (const int index) {return &(data[index*nx]);} 
} 

इस तरह एक 2d सरणी के रूप में काम करता है dgrid[x][y], लेकिन डेटा सटा हुआ है याद में।

(*this)[i][j] = (*this)[i+1][j] 
       + (*this)[i-1][j] 
       + (*this)[i][j+1] 
       + (*this)[i][j-1] 
       - 4*(*this)[i][j]; 

वहाँ एक बेहतर तरीका है:

हालांकि, अंदर सदस्य कार्यों से थोड़ा और भद्दा है, मैं (*this)[x][y] जो काम करता है, लेकिन बदबूदार लगता है, खासकर जब मैं की तरह वर्गों है की तरह कुछ करने की ज़रूरत है यह करने के लिए? this->[x][y] की तरह कुछ (लेकिन यह काम नहीं करता है)। क्या एक छोटा सा कार्य f(x,y) returns &data[index*nx+ny] एकमात्र विकल्प का उपयोग कर रहा है?

+6

'ऑटो और स्वयं = * यह; स्वयं [i] [j] = ...; –

+1

या, अधिक साहसी प्रकार के लिए, '(* यह)' को '[0] 'के रूप में लिखा जा सकता है ... –

+1

अधिक क्लंकी, लेकिन आप भी क्या हैं इसके बाद: 'यह-> ऑपरेटर [] (i) [j] ':) – MatiasFG

उत्तर

5

आप ओवरलोड सकता है ->, लेकिन क्यों नहीं बस कार्य करें:

T& that = *this; //or use auto as t.c. suggests 

that[i][j] = that[i+1][j] 
      + that[i-1][j] 
      + that[i][j+1] 
      + that[i][j-1] 
      - 4*that[i][j]; 

है कि (यमक) इस रूप में कम से कम के रूप में पठनीय -> [] []। नहीं ?

संबंधित मुद्दे