Tworzenie indeksów dolnych
Operator indeksu dolnego ([ ]), podobnie jak operator wywołania funkcji, jest traktowany jako operator binarny. Operator indeksu dolnego musi być niestatyczną funkcją składową, która przyjmuje jeden argument. Ten argument może być dowolnego typu i wyznacza żądany indeks dolny tablicy.
Przykład
W poniższym przykładzie pokazano, jak utworzyć wektor typu int
implementujący sprawdzanie granic:
// 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
Komentarze
Gdy i
osiągnie wartość 10 w poprzednim programie, operator[] wykryje, że jest używany indeks dolny poza granicami i zgłasza komunikat o błędzie.
Należy pamiętać, że operator funkcji [] zwraca typ odwołania. Powoduje to, że jest to wartość l, umożliwiając używanie wyrażeń w indeksie dolnym po obu stronach operatorów przypisania.
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla