0Pricing
C++ Academy · Lektion

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

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

Verwendung 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

  1. Arithmetische und Vergleichsoperatoren
  2. Stream-Einfüge- und Extraktionsoperatoren
  3. Index- und Funktionsaufrufoperatoren
  4. Drei-Wege-Vergleichsoperator in C++20
← Zurück zu C++ Academy