Operatori di indicizzazione e chiamata di funzione
Sovraccarichi [] e () per fare in modo che i tipi si comportino come contenitori o oggetti chiamabili
Operatori di indicizzazione e chiamata di funzione è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
operator[] — Accesso indicizzato
Sovraccarichi [] per rendere il proprio tipo utilizzabile come un array. È utile per contenitori, matrici e classi che rappresentano immagini.
class Vec {
std::vector<double> data_;
public:
double& operator[](size_t i) { return data_[i]; }
double operator[](size_t i) const { return data_[i]; }
};Due overload: const e non-const
Li fornisca entrambi. Una chiamata su un'istanza const utilizza l'overload const; quello non-const consente l'assegnazione.
Controllo dei limiti
Per convenzione, il semplice operator[] non verifica i limiti. Fornisca un metodo at() separato che generi un'eccezione, come nella libreria standard.
double& at(size_t i) {
if (i >= data_.size()) throw std::out_of_range("");
return data_[i];
}Indice multidimensionale (C++23)
C++23 ha aggiunto l'indicizzazione con argomenti separati da virgole: m[i, j]. Le versioni precedenti richiedono una chiamata di funzione o indici concatenati.
// C++23
double& operator[](size_t i, size_t j);
// Pre-C++23 workaround
double& operator()(size_t i, size_t j);operator() — Chiamata di funzione
Sovraccarichi () per rendere richiamabili le istanze. Viene utilizzato per funtori, indicizzazione di matrici e predicati configurabili.
struct Square {
int operator()(int x) const { return x * x; }
};
Square sq;
std::cout << sq(5); // 25Funtori con stato
L'operatore di chiamata di funzione può utilizzare variabili membro, creando un oggetto richiamabile con stato.
struct GreaterThan {
int threshold;
bool operator()(int x) const { return x > threshold; }
};
GreaterThan over10{10};
std::cout << over10(15); // trueUtilizzo con gli algoritmi STL
Passi le istanze dei funtori agli algoritmi al posto delle funzioni.
std::vector<int> v = {1, 11, 2, 22};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});Operatori con più argomenti
Sia [] (prima di C++23) sia () possono essere sovraccaricati con un numero qualsiasi di argomenti. Prima di C++23, () è la scelta più flessibile per l'accesso simile a quello di una matrice.
Restituire riferimenti o valori
Restituisca un riferimento per consentire l'assegnazione tramite l'indice. Restituisca un valore per i tipi di sola lettura.
Oggetti proxy
Se operator[] deve restituire un oggetto complesso, come un campo di bit, restituisca una piccola classe proxy con operatori di conversione e assegnazione.
Esempi reali
Usi comuni:
std::vector::operator[]std::map::operator[]— inserisce le chiavi mancanti- Classi matrice:
m(i, j) - Funtori per gli algoritmi
Verifica rapida
Come si rendono richiamabili come una funzione le istanze di una classe?
Riepilogo
Sovraccarichi [] per l'accesso indicizzato, fornendo overload const e non-const. Sovraccarichi () per rendere richiamabili le istanze: è la base dei funtori e delle lambda.
Domande Frequenti
La lezione «Operatori di indicizzazione e chiamata di funzione» è gratuita?
Sì — il testo completo di «Operatori di indicizzazione e chiamata di funzione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «Operatori di indicizzazione e chiamata di funzione»?
Sovraccarichi [] e () per fare in modo che i tipi si comportino come contenitori o oggetti chiamabili Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Operatori di indicizzazione e chiamata di funzione»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Operatori aritmetici e di confronto
- Operatori di inserimento ed estrazione dagli stream
- Operatori di indicizzazione e chiamata di funzione
- Operatore di confronto a tre vie in C++20