Index- und Funktionsaufrufoperatoren
Überladen Sie [] und (), damit sich Typen wie Container oder aufrufbare Objekte verhalten.
Index- und Funktionsaufrufoperatoren ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
operator[] — Indizierter Zugriff
Überladen Sie [], damit Ihr Typ wie ein Array verwendet werden kann. Das ist für Container, Matrizen und Bildklassen nützlich.
class Vec {
std::vector<double> data_;
public:
double& operator[](size_t i) { return data_[i]; }
double operator[](size_t i) const { return data_[i]; }
};Zwei Überladungen: const und nicht-const
Stellen Sie beide bereit. Der Aufruf für eine const-Instanz verwendet die const-Überladung; die nicht-const-Überladung ermöglicht Zuweisungen.
Grenzprüfung
Der einfache operator[] prüft konventionsgemäß keine Grenzen. Stellen Sie eine separate Methode at() bereit, die eine Ausnahme auslöst — wie in der Standardbibliothek.
double& at(size_t i) {
if (i >= data_.size()) throw std::out_of_range("");
return data_[i];
}Mehrdimensionaler Subscript-Operator (C++23)
C++23 führte einen Subscript-Operator mit kommagetrennten Argumenten ein: m[i, j]. In früheren Versionen benötigen Sie einen Funktionsaufruf oder verkettete Subscript-Operatoren.
// C++23
double& operator[](size_t i, size_t j);
// Pre-C++23 workaround
double& operator()(size_t i, size_t j);operator() — Funktionsaufruf
Überladen Sie (), damit Instanzen aufrufbar werden. Das wird für Funktoren, Matrixindizierung und konfigurierbare Prädikate verwendet.
struct Square {
int operator()(int x) const { return x * x; }
};
Square sq;
std::cout << sq(5); // 25Zustandsbehaftete Funktoren
Der Funktionsaufrufoperator kann mit Membervariablen arbeiten — so entsteht ein zustandsbehaftetes aufrufbares Objekt.
struct GreaterThan {
int threshold;
bool operator()(int x) const { return x > threshold; }
};
GreaterThan over10{10};
std::cout << over10(15); // trueVerwendung mit STL-Algorithmen
Übergeben Sie Funktorinstanzen anstelle von Funktionen an Algorithmen.
std::vector<int> v = {1, 11, 2, 22};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});Operatoren mit mehreren Argumenten
Sowohl [] (vor C++23) als auch () können mit einer beliebigen Anzahl von Argumenten überladen werden. Vor C++23 ist () für einen matrixähnlichen Zugriff die flexiblere Wahl.
Referenzen oder Werte zurückgeben
Geben Sie eine Referenz zurück, damit über den Subscript-Operator eine Zuweisung möglich ist. Für schreibgeschützte Typen geben Sie einen Wert zurück.
Proxy-Objekte
Wenn operator[] ein komplexes Objekt zurückgeben muss, etwa ein Bitfeld, geben Sie eine kleine Proxyklasse mit Konvertierungs- und Zuweisungsoperatoren zurück.
Beispiele aus der Praxis
Häufige Verwendungen:
std::vector::operator[]std::map::operator[]— fügt Elemente bei fehlenden Schlüsseln ein- Matrixklassen:
m(i, j) - Funktoren für Algorithmen
Kurzer Test
Wie machen Sie Instanzen einer Klasse aufrufbar wie eine Funktion?
Zusammenfassung
Überladen Sie [] für indizierten Zugriff (stellen Sie const- und nicht-const-Überladungen bereit). Überladen Sie (), damit Instanzen aufrufbar werden — die Grundlage von Funktoren und Lambdas.
Häufig gestellte Fragen
Ist die Lektion „Index- und Funktionsaufrufoperatoren“ kostenlos?
Ja — der vollständige Text von „Index- und Funktionsaufrufoperatoren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Index- und Funktionsaufrufoperatoren“?
Überladen Sie [] und (), damit sich Typen wie Container oder aufrufbare Objekte verhalten. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Index- und Funktionsaufrufoperatoren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Arithmetische und Vergleichsoperatoren
- Stream-Einfüge- und Extraktionsoperatoren
- Index- und Funktionsaufrufoperatoren
- Drei-Wege-Vergleichsoperator in C++20