Klicken Sie Zeilen an, die mit + markiert sind. Dort ist Hilfeinformation hinterlegt.
Der Header-Guard bleibt in C++ so wie in C.
Unten werden die Namen std::ostream und std::istream
aus der Bibliothek gebraucht.
Das final verbietet Unterklassen.
In Java schreibt man das vor class hin.
Die Fabrikmethode legt das Objekt nicht auf dem Heap an.
Es wird kein Zeiger geliefert, sondern das Objekt wird per Wertkopie geliefert,
so als würde ein int zurückgegeben.
Mit = default wird die automatische Implementierung das Default-Konstruktors
angefordert, obwohl es einen expliziten Konstruktor mit Parametern gibt.
Die automatische Implementierung lässt die Membervariablen übrigens uninitialisiert,
weil die einen Grundtyp int und keinen Klassentyp haben.
Die Kopier- und Move-Konstruktoren und -Zuweisungen sowie den Destruktor
erzeugt der Compiler automatisch. Die Implementierungen sind auf jeden Fall korrekt,
weil alle Membervariablen den primitiven Typ int haben.
Gefährlich sind die automatischen Implementierungen,
wenn es Membervariablen mit Zeigertyp gibt.
Der Vergleichsoperator ist zweistellig. Damit er sich hinsichtlich Typanpassungen
der beiden Operanden symmetrisch verhält, wird er außerhalb der Klasse
als Funktion ohne this implementiert. Durch die friend-Deklaration
bekommt die Funktion Zugriff auf die privaten Membervariablen.
Der Ausgabeoperator kann nicht als Memberfunktion mit this implementiert werden,
weil der linke Operand ein std::ostream ist und kein datum.
Durch die friend-Deklaration bekommt die Funktion trotzdem Zugriff
auf die privaten Membervariablen.
Der Eingabeoperator braucht keinen direkten Zugriff auf die privaten Membervariablen von
datum. Er verwendet den öffentlichen Konstruktor und den öffentlichen
Zuweisungsoperator von datum für den Zugriff.
Deshalb ist der Eingabeoperator außerhalb von datum deklariert,
und nicht innerhalb als friend.