Bagikan melalui


Subskripsi

Operator subskrip ([ ]), seperti operator panggilan fungsi, dianggap sebagai operator biner. Operator subskrip harus merupakan fungsi anggota nonstatis yang mengambil satu argumen. Argumen ini bisa dari jenis apa pun dan menunjuk subskrip array yang diinginkan.

Contoh

Contoh berikut menunjukkan cara membuat vektor jenis int yang menerapkan pemeriksaan batas:

// subscripting.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class IntVector {
public:
   IntVector( int cElements );
   ~IntVector() { delete [] _iElements; }
   int& operator[](int nSubscript);
private:
   int *_iElements;
   int _iUpperBound;
};

// Construct an IntVector.
IntVector::IntVector( int cElements ) {
   _iElements = new int[cElements];
   _iUpperBound = cElements;
}

// Subscript operator for IntVector.
int& IntVector::operator[](int nSubscript) {
   static int iErr = -1;

   if( nSubscript >= 0 && nSubscript < _iUpperBound )
      return _iElements[nSubscript];
   else {
      clog << "Array bounds violation." << endl;
      return iErr;
   }
}

// Test the IntVector class.
int main() {
   IntVector v( 10 );
   int i;

   for( i = 0; i <= 10; ++i )
      v[i] = i;

   v[3] = v[9];

   for ( i = 0; i <= 10; ++i )
      cout << "Element: [" << i << "] = " << v[i] << endl;
}
Array bounds violation.
Element: [0] = 0
Element: [1] = 1
Element: [2] = 2
Element: [3] = 9
Element: [4] = 4
Element: [5] = 5
Element: [6] = 6
Element: [7] = 7
Element: [8] = 8
Element: [9] = 9
Array bounds violation.
Element: [10] = 10

Komentar

Ketika i mencapai 10 dalam program sebelumnya, operator[] mendeteksi bahwa subskrip di luar batas sedang digunakan dan mengeluarkan pesan kesalahan.

Perhatikan bahwa operator fungsi [] mengembalikan jenis referensi. Ini menyebabkannya menjadi nilai l, memungkinkan Anda menggunakan ekspresi subskrip di kedua sisi operator penugasan.

Baca juga

Kelebihan Beban Operator