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.