Arithmetische und Vergleichsoperatoren
Überladen Sie +, -, *, /, ==, < und verwandte Operatoren nach bewährten Vorgehensweisen.
Arithmetische und Vergleichsoperatoren ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.
Warum Operatoren überladen?
Durch Operatorüberladung können sich Ihre Typen wie eingebaute Typen verhalten – v1 + v2 ist verständlicher als v1.add(v2). Verwenden Sie sie für Werttypen wie Vektoren, komplexe Zahlen oder Geldbeträge.
operator+ definieren
Sie können + als Member oder als freie Funktion überladen. Freie Funktionen sind symmetrischer.
struct Vec2 {
double x, y;
Vec2 operator+(const Vec2& other) const {
return {x + other.x, y + other.y};
}
};Form einer freien Funktion
Eine freie Funktion behandelt beide Operanden gleich – nützlich, wenn Konvertierungen auf beiden Seiten möglich sein sollen.
Vec2 operator+(const Vec2& a, const Vec2& b) {
return {a.x + b.x, a.y + b.y};
}Zusammengesetzte Zuweisungsoperatoren
Implementieren Sie zuerst += und bauen Sie anschließend + darauf auf. Das ist das idiomatische Vorgehen.
Vec2& operator+=(const Vec2& other) {
x += other.x;
y += other.y;
return *this;
}
Vec2 operator+(Vec2 lhs, const Vec2& rhs) {
lhs += rhs;
return lhs;
}Unäre Operatoren
Einige Operatoren sind unär: -x, +x, !x, ~x, ++x, --x.
Vec2 operator-() const { return {-x, -y}; }Präfix- oder Postfix-Inkrement
Das Präfix benötigt keinen Parameter; das Postfix verwendet zur Unterscheidung ein Dummy-int.
Counter& operator++(); // prefix
Counter operator++(int); // postfixVergleichsoperatoren
Vergleichsoperatoren geben bool zurück. Für einheitliches Verhalten eignen sich freie Funktionen am besten.
bool operator==(const Vec2& a, const Vec2& b) {
return a.x == b.x && a.y == b.y;
}
bool operator!=(const Vec2& a, const Vec2& b) { return !(a == b); }Kleiner-als-Operator für Sortierung
Wenn Ihr Typ sortiert oder als Map-Schlüssel verwendet werden soll, definieren Sie operator<. Die anderen relationalen Operatoren lassen sich daraus ableiten.
Symmetrische Operatoren für gemischte Typen
Um sowohl 3 + vec als auch vec + 3 zu unterstützen, definieren Sie beide Varianten – oder verwenden Sie eine freie Funktion, die konvertiert.
Überraschungen vermeiden
Überladene Operatoren sollten sich intuitiv verhalten. Definieren Sie + nicht so um, dass es Subtraktion bedeutet. Halten Sie sich an die herkömmliche Algebra des Operators.
Operatoren, die Sie nicht überladen können
Einige Operatoren sind nicht überladbar:
?:— ternärer Operator.— Memberzugriff (aber->ist überladbar)::— Bereichsauflösungsizeof,alignof,typeid
Kurzer Test
Was ist das kanonische Implementierungsmuster für operator+ bei einem benutzerdefinierten Typ?
Zusammenfassung
Durch Operatorüberladung fühlen sich benutzerdefinierte Typen wie native Typen an. Implementieren Sie zuerst die zusammengesetzte Zuweisung und anschließend die einfache Arithmetik. Vergleichsoperatoren sind als freie Funktionen am besten geeignet. Halten Sie sich an die konventionelle Semantik — Überraschungen sind Fehler.
Häufig gestellte Fragen
Ist die Lektion „Arithmetische und Vergleichsoperatoren“ kostenlos?
Ja — der vollständige Text von „Arithmetische und Vergleichsoperatoren“ 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 „Arithmetische und Vergleichsoperatoren“?
Überladen Sie +, -, *, /, ==, < und verwandte Operatoren nach bewährten Vorgehensweisen. 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 1 von 4.
Wie lange dauert die Lektion „Arithmetische und Vergleichsoperatoren“?
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