0Pricing
C++ Academy · Lezione

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);   // 25

Funtori 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);   // true

Utilizzo 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

  1. Operatori aritmetici e di confronto
  2. Operatori di inserimento ed estrazione dagli stream
  3. Operatori di indicizzazione e chiamata di funzione
  4. Operatore di confronto a tre vie in C++20
← Torna a C++ Academy