Indeks- og funktionskaldsoperatorer
Overload [] og (), så typer opfører sig som containere eller callable-objekter
Indeks- og funktionskaldsoperatorer er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.
operator[] — Indekseret adgang
Overbelast [], så din type kan bruges som et array. Det er nyttigt til containere, matricer og billedklasser.
class Vec {
std::vector<double> data_;
public:
double& operator[](size_t i) { return data_[i]; }
double operator[](size_t i) const { return data_[i]; }
};To overbelastninger: const og ikke-const
Lever begge. Et kald på en const-instans vælger const-overbelastningen, mens en ikke-const-instans tillader tildeling.
Kontrol af grænser
operator[] kontrollerer normalt ikke grænser. Lever en separat at()-metode, der kaster en undtagelse — ligesom standardbiblioteket.
double& at(size_t i) {
if (i >= data_.size()) throw std::out_of_range("");
return data_[i];
}Flerdimensionel indeksering (C++23)
C++23 tilføjede indeksering med kommaseparerede argumenter: m[i, j]. I tidligere versioner skal du bruge et funktionskald eller kædede indekseringer.
// C++23
double& operator[](size_t i, size_t j);
// Pre-C++23 workaround
double& operator()(size_t i, size_t j);operator() — Funktionskald
Overbelast (), så instanser kan kaldes. Det bruges til funktorer, matrixindeksering og konfigurerbare prædikater.
struct Square {
int operator()(int x) const { return x * x; }
};
Square sq;
std::cout << sq(5); // 25Funktorer med tilstand
Funktionskaldsoperatoren fungerer sammen med medlemsvariable og giver et kaldbart objekt med tilstand.
struct GreaterThan {
int threshold;
bool operator()(int x) const { return x > threshold; }
};
GreaterThan over10{10};
std::cout << over10(15); // trueBrug med STL-algoritmer
Giv funktorinstanser til algoritmer i stedet for funktioner.
std::vector<int> v = {1, 11, 2, 22};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});Operatorer med flere argumenter
Både [] (før C++23) og () kan overbelastes med et vilkårligt antal argumenter. () er det mere fleksible valg til matrixlignende adgang før C++23.
Returnering af referencer kontra værdier
Returnér en reference, så det er muligt at tildele gennem indekseringen. Returnér en værdi for skrivebeskyttede typer.
Proxyobjekter
Hvis operator[] skal returnere et komplekst objekt (f.eks. et bitfelt), skal du returnere en lille proxyklasse med konverterings- og tildelingsoperatorer.
Eksempler fra virkeligheden
Almindelige anvendelser:
std::vector::operator[]std::map::operator[]— indsætter ved manglende nøgler- Matrixklasser:
m(i, j) - Funktorer til algoritmer
Hurtigt tjek
Hvordan gør du instanser af en klasse kaldbare som en funktion?
Opsummering
Overbelast [] til indekseret adgang (lever const- og ikke-const-overbelastninger). Overbelast (), så instanser kan kaldes — det er grundlaget for funktorer og lambdaer.
Lær C++ med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Indeks- og funktionskaldsoperatorer” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Indeks- og funktionskaldsoperatorer”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Indeks- og funktionskaldsoperatorer”?
Overload [] og (), så typer opfører sig som containere eller callable-objekter Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C++ Academy?
Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Indeks- og funktionskaldsoperatorer”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C++ Academy-lektion?
Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Aritmetiske operatorer og sammenligningsoperatorer
- Operatorer til streamindsættelse og -udtræk
- Indeks- og funktionskaldsoperatorer
- Trevejs-sammenligningsoperatoren i C++20