Ich versuchs möglichst ohne Latein:
CLogfile erbt von TSingleton. Damit hat CLogfile jetzt genau die Variablen und Funktionen von TSingleton auch. Würde ich per
|
C-/C++-Quelltext
|
1
|
CLogfile myFile;
|
eine Instanz erzeugen, wäre allerdings das ganze Singleton-Gezeugs für die Katz. Beim Singleton gehts ja darum, sicherzustellen, dass es nur eine Instanz gibt, und das macht unsere Get()-Funktion. Die hat CLogfile ja gerade von TSingleton geerbt.
Get() ist statisch. Auf statische Member greift man mit Klassenname::Member zu. Wie du siehst ist das hier tatsächlich einfach eine neue Anwendungsweise von ::
Der Sinn dahinter ist der, dass ein statisches Member ja nicht wirklich zu einer Funktion oder einer Instanz gehört, es gehört zu der Klasse selbst. Also muss man direkt über den Namen der Klasse irgendwie drauf zugreifen. Und beim Definieren einer Funktion außerhalb der Klasse wird ja :: auch bereits benutzt, von daher denke ich mal, es wurde die gleiche Syntax genommen, weils irgendwie Ähnlichkeit hat.
Um jetzt also letztendlich tatsächlich die Logfile-Instanz zu bekommen, benutze ich
|
C-/C++-Quelltext
|
1
|
CLogfile::Get()
|
Das gibt mir den Zeiger auf die Logfile-Instanz. (Und falls es noch keine gab, wird eine angelegt.)
Und natürlich muss ich bei einem Zeiger den -> Operator benutzen, um auf public Member zuzugreifen:
|
C-/C++-Quelltext
|
1
2
3
|
CLogfile::Get()->Text("Hallo Welt");
//Das ist das gleiche wie
Logfile-Instanzzeiger->Text("Hallo Welt");
|
Und da die Funktionen von TSingleton statisch sind, hast du nicht nur aus main() sondern restlos von überall her Zugriff darauf. Das ist ja eben das problem, es ist global.